{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import json\n",
    "from datetime import datetime"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Preprocessing data\n",
    "\n",
    "We will assume the ArXiv dataset has been downloaded and extracted into the analysis folder. First, we will load the articles in the category of nuclear experiments in the Pandas data frame. The following script also preprocesses the authors' names and the published date of the papers.\n",
    "\n",
    "Data is available on https://www.kaggle.com/Cornell-University/arxiv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_clean_authors(authors):\n",
    "    r = []\n",
    "    for a in authors:\n",
    "        r.append(\" \".join(a).strip())\n",
    "    return r"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>submitter</th>\n",
       "      <th>authors</th>\n",
       "      <th>title</th>\n",
       "      <th>comments</th>\n",
       "      <th>journal-ref</th>\n",
       "      <th>doi</th>\n",
       "      <th>report-no</th>\n",
       "      <th>categories</th>\n",
       "      <th>license</th>\n",
       "      <th>abstract</th>\n",
       "      <th>versions</th>\n",
       "      <th>update_date</th>\n",
       "      <th>authors_parsed</th>\n",
       "      <th>clean_authors</th>\n",
       "      <th>created_date</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0704.0075</td>\n",
       "      <td>Xiang Liu</td>\n",
       "      <td>Chong Chen, Xiao-Lin Chen, Xiang Liu, Wei-Zhen...</td>\n",
       "      <td>Strong decays of charmed baryons</td>\n",
       "      <td>13 pages, 9 figures, 9 tables. Some descriptio...</td>\n",
       "      <td>Phys.Rev.D75:094017,2007</td>\n",
       "      <td>10.1103/PhysRevD.75.094017</td>\n",
       "      <td>None</td>\n",
       "      <td>hep-ph hep-ex nucl-ex</td>\n",
       "      <td>None</td>\n",
       "      <td>There has been important experimental progre...</td>\n",
       "      <td>[{'version': 'v1', 'created': 'Sun, 1 Apr 2007...</td>\n",
       "      <td>2008-11-26</td>\n",
       "      <td>[[Chen, Chong, ], [Chen, Xiao-Lin, ], [Liu, Xi...</td>\n",
       "      <td>[Chen Chong, Chen Xiao-Lin, Liu Xiang, Deng We...</td>\n",
       "      <td>2007-04-01 09:45:55</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0704.0154</td>\n",
       "      <td>Ulrich Mosel</td>\n",
       "      <td>Fabian Eichstaedt, Stefan Leupold, Ulrich Mose...</td>\n",
       "      <td>Hadrons in Medium -- Theory confronts experiment</td>\n",
       "      <td>Key Lecture at YKIS2006, Kyoto, Dec. 2006</td>\n",
       "      <td>Prog.Theor.Phys.Suppl.168:495-502,2007</td>\n",
       "      <td>10.1143/PTPS.168.495</td>\n",
       "      <td>None</td>\n",
       "      <td>nucl-th hep-ph nucl-ex</td>\n",
       "      <td>None</td>\n",
       "      <td>In this talk we briefly summarize our theore...</td>\n",
       "      <td>[{'version': 'v1', 'created': 'Mon, 2 Apr 2007...</td>\n",
       "      <td>2008-11-26</td>\n",
       "      <td>[[Eichstaedt, Fabian, ], [Leupold, Stefan, ], ...</td>\n",
       "      <td>[Eichstaedt Fabian, Leupold Stefan, Mosel Ulri...</td>\n",
       "      <td>2007-04-02 09:36:31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0704.0200</td>\n",
       "      <td>Martin Schumacher</td>\n",
       "      <td>Martin Schumacher</td>\n",
       "      <td>Electromagnetic polarizabilities and the excit...</td>\n",
       "      <td>None</td>\n",
       "      <td>Eur.Phys.J.A31:327-333,2007</td>\n",
       "      <td>10.1140/epja/i2006-10235-1</td>\n",
       "      <td>None</td>\n",
       "      <td>hep-ph nucl-ex</td>\n",
       "      <td>None</td>\n",
       "      <td>The electromagnetic polarizabilities of the ...</td>\n",
       "      <td>[{'version': 'v1', 'created': 'Mon, 2 Apr 2007...</td>\n",
       "      <td>2013-06-26</td>\n",
       "      <td>[[Schumacher, Martin, ]]</td>\n",
       "      <td>[Schumacher Martin]</td>\n",
       "      <td>2007-04-02 14:10:13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0704.0220</td>\n",
       "      <td>Jason Ulery</td>\n",
       "      <td>Jason Glyndwr Ulery (for the STAR Collaboration)</td>\n",
       "      <td>Three Particle Correlations from STAR</td>\n",
       "      <td>Talk given at IWCF 2006, Hangzhou, China. 8 Pa...</td>\n",
       "      <td>Int.J.Mod.Phys.E16:3123-3130,2008</td>\n",
       "      <td>10.1142/S0218301307009117</td>\n",
       "      <td>None</td>\n",
       "      <td>nucl-ex</td>\n",
       "      <td>None</td>\n",
       "      <td>Two-particle correlations have shown modific...</td>\n",
       "      <td>[{'version': 'v1', 'created': 'Mon, 2 Apr 2007...</td>\n",
       "      <td>2008-11-26</td>\n",
       "      <td>[[Ulery, Jason Glyndwr, , for the STAR Collabo...</td>\n",
       "      <td>[Ulery Jason Glyndwr  for the STAR Collaboration]</td>\n",
       "      <td>2007-04-02 15:45:49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0704.0224</td>\n",
       "      <td>Jason Ulery</td>\n",
       "      <td>Jason Glyndwr Ulery (for the STAR Collaboration)</td>\n",
       "      <td>Are There Mach Cones in Heavy Ion Collisions? ...</td>\n",
       "      <td>Poster shown at Quark Matter 2006, Shanghai, C...</td>\n",
       "      <td>Int.J.Mod.Phys.E16:2005-2010,2007</td>\n",
       "      <td>10.1142/S0218301307007374</td>\n",
       "      <td>None</td>\n",
       "      <td>nucl-ex</td>\n",
       "      <td>None</td>\n",
       "      <td>We present results from STAR on 3-particle a...</td>\n",
       "      <td>[{'version': 'v1', 'created': 'Mon, 2 Apr 2007...</td>\n",
       "      <td>2008-11-26</td>\n",
       "      <td>[[Ulery, Jason Glyndwr, , for the STAR Collabo...</td>\n",
       "      <td>[Ulery Jason Glyndwr  for the STAR Collaboration]</td>\n",
       "      <td>2007-04-02 15:55:08</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          id          submitter  \\\n",
       "0  0704.0075          Xiang Liu   \n",
       "1  0704.0154       Ulrich Mosel   \n",
       "2  0704.0200  Martin Schumacher   \n",
       "3  0704.0220        Jason Ulery   \n",
       "4  0704.0224        Jason Ulery   \n",
       "\n",
       "                                             authors  \\\n",
       "0  Chong Chen, Xiao-Lin Chen, Xiang Liu, Wei-Zhen...   \n",
       "1  Fabian Eichstaedt, Stefan Leupold, Ulrich Mose...   \n",
       "2                                  Martin Schumacher   \n",
       "3   Jason Glyndwr Ulery (for the STAR Collaboration)   \n",
       "4   Jason Glyndwr Ulery (for the STAR Collaboration)   \n",
       "\n",
       "                                               title  \\\n",
       "0                   Strong decays of charmed baryons   \n",
       "1   Hadrons in Medium -- Theory confronts experiment   \n",
       "2  Electromagnetic polarizabilities and the excit...   \n",
       "3              Three Particle Correlations from STAR   \n",
       "4  Are There Mach Cones in Heavy Ion Collisions? ...   \n",
       "\n",
       "                                            comments  \\\n",
       "0  13 pages, 9 figures, 9 tables. Some descriptio...   \n",
       "1          Key Lecture at YKIS2006, Kyoto, Dec. 2006   \n",
       "2                                               None   \n",
       "3  Talk given at IWCF 2006, Hangzhou, China. 8 Pa...   \n",
       "4  Poster shown at Quark Matter 2006, Shanghai, C...   \n",
       "\n",
       "                              journal-ref                         doi  \\\n",
       "0                Phys.Rev.D75:094017,2007  10.1103/PhysRevD.75.094017   \n",
       "1  Prog.Theor.Phys.Suppl.168:495-502,2007        10.1143/PTPS.168.495   \n",
       "2             Eur.Phys.J.A31:327-333,2007  10.1140/epja/i2006-10235-1   \n",
       "3       Int.J.Mod.Phys.E16:3123-3130,2008   10.1142/S0218301307009117   \n",
       "4       Int.J.Mod.Phys.E16:2005-2010,2007   10.1142/S0218301307007374   \n",
       "\n",
       "  report-no              categories license  \\\n",
       "0      None   hep-ph hep-ex nucl-ex    None   \n",
       "1      None  nucl-th hep-ph nucl-ex    None   \n",
       "2      None          hep-ph nucl-ex    None   \n",
       "3      None                 nucl-ex    None   \n",
       "4      None                 nucl-ex    None   \n",
       "\n",
       "                                            abstract  \\\n",
       "0    There has been important experimental progre...   \n",
       "1    In this talk we briefly summarize our theore...   \n",
       "2    The electromagnetic polarizabilities of the ...   \n",
       "3    Two-particle correlations have shown modific...   \n",
       "4    We present results from STAR on 3-particle a...   \n",
       "\n",
       "                                            versions update_date  \\\n",
       "0  [{'version': 'v1', 'created': 'Sun, 1 Apr 2007...  2008-11-26   \n",
       "1  [{'version': 'v1', 'created': 'Mon, 2 Apr 2007...  2008-11-26   \n",
       "2  [{'version': 'v1', 'created': 'Mon, 2 Apr 2007...  2013-06-26   \n",
       "3  [{'version': 'v1', 'created': 'Mon, 2 Apr 2007...  2008-11-26   \n",
       "4  [{'version': 'v1', 'created': 'Mon, 2 Apr 2007...  2008-11-26   \n",
       "\n",
       "                                      authors_parsed  \\\n",
       "0  [[Chen, Chong, ], [Chen, Xiao-Lin, ], [Liu, Xi...   \n",
       "1  [[Eichstaedt, Fabian, ], [Leupold, Stefan, ], ...   \n",
       "2                           [[Schumacher, Martin, ]]   \n",
       "3  [[Ulery, Jason Glyndwr, , for the STAR Collabo...   \n",
       "4  [[Ulery, Jason Glyndwr, , for the STAR Collabo...   \n",
       "\n",
       "                                       clean_authors        created_date  \n",
       "0  [Chen Chong, Chen Xiao-Lin, Liu Xiang, Deng We... 2007-04-01 09:45:55  \n",
       "1  [Eichstaedt Fabian, Leupold Stefan, Mosel Ulri... 2007-04-02 09:36:31  \n",
       "2                                [Schumacher Martin] 2007-04-02 14:10:13  \n",
       "3  [Ulery Jason Glyndwr  for the STAR Collaboration] 2007-04-02 15:45:49  \n",
       "4  [Ulery Jason Glyndwr  for the STAR Collaboration] 2007-04-02 15:55:08  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "articles = []\n",
    "category = 'nucl-ex'\n",
    "with open(\"arxiv-metadata-oai-snapshot.json\", \"r\") as f:\n",
    "    for l in f:\n",
    "        d = json.loads(l)\n",
    "        if category in d['categories'].split(' '):\n",
    "            d['clean_authors'] = get_clean_authors(d['authors_parsed']) \n",
    "            articles.append(d)\n",
    "\n",
    "articles_df = pd.DataFrame().from_records(articles)\n",
    "articles_df['created_date'] = [datetime.strptime(date[0]['created'].split(',')[1],' %d %b %Y %H:%M:%S %Z') \n",
    "                               for date in articles_df['versions']]\n",
    "articles_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If we take a look at a random abstract text, we can notice that the text is available in the Latex format:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'  The electromagnetic polarizabilities of the nucleon are shown to be\\nessentially composed of the nonresonant $\\\\alpha_p(E_{0+})=+3.2$,\\n$\\\\alpha_n(E_{0+})=+4.1$,the $t$-channel $\\\\alpha^t_{p,n}=-\\\\beta^t_{p,n}=+7.6$\\nand the resonant $\\\\beta_{p,n}(P_{33}(1232))=+8.3$ contributions (in units of\\n$10^{-4}$fm$^3$. The remaining deviations from the experimental data\\n$\\\\Delta\\\\alpha_p=1.2\\\\pm 0.6$, $\\\\Delta\\\\beta_p=1.2\\\\mp 0.6$, \\\\Delta\\\\alpha_n=0.8\\\\pm\\n1.7$ and $\\\\Delta\\\\beta_n=2.0\\\\mp 1.8$ are contributed by a larger number of\\nresonant and nonresonant processes with cancellations between the\\ncontributions. This result confirms that dominant contributions to the electric\\nand magnetic polarizabilities may be represented in terms of two-photon\\ncouplings to the $\\\\sigma$-meson having the predicted mass $m_\\\\sigma=666$ MeV\\nand two-photon width $\\\\Gamma_{\\\\gamma\\\\gamma}=2.6$ keV.\\n'"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "articles_df['abstract'][2]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We will transform both the title and abstract text to UTF-8 format using the pylatexenc library."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pylatexenc.latex2text import LatexNodes2Text"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'The electromagnetic polarizabilities of the nucleon are shown to be essentially composed of the nonresonant α_p(E_0+)=+3.2, α_n(E_0+)=+4.1,the t-channel α^t_p,n=-β^t_p,n=+7.6 and the resonant β_p,n(P_33(1232))=+8.3 contributions (in units of 10^-4fm^3. The remaining deviations from the experimental data Δα_p=1.2± 0.6, Δβ_p=1.2∓ 0.6, Δα_n=0.8±1.7andΔβ_n=2.0∓1.8are contributed by a larger number of resonant and nonresonant processes with cancellations between the contributions. This result confirms that dominant contributions to the electric and magnetic polarizabilities may be represented in terms of two-photon couplings to theσ-meson having the predicted massm_σ=666MeV and two-photon widthΓ_γγ=2.6keV.'"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "LatexNodes2Text().latex_to_text(articles_df['abstract'][2]).replace('\\n', ' ').strip()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# LaTex to UTF\n",
    "clean_abstract = []\n",
    "clean_title = []\n",
    "for i,a in articles_df.iterrows():\n",
    "    # Clean title\n",
    "    try:\n",
    "        clean_title.append(LatexNodes2Text().latex_to_text(a['title']).replace('\\n', ' ').strip()) \n",
    "    except:\n",
    "        clean_title.append(a['abstract'].replace('\\n', ' ').strip())\n",
    "    # Clean abstract\n",
    "    try:\n",
    "        clean_abstract.append(LatexNodes2Text().latex_to_text(a['abstract']).replace('\\n', ' ').strip()) \n",
    "    except:\n",
    "        clean_abstract.append(a['abstract'].replace('\\n', ' ').strip())\n",
    "articles_df['clean_abstracts'] = clean_abstract\n",
    "articles_df['clean_title'] = clean_title"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>clean_title</th>\n",
       "      <th>clean_authors</th>\n",
       "      <th>created_date</th>\n",
       "      <th>clean_abstracts</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0704.0075</td>\n",
       "      <td>Strong decays of charmed baryons</td>\n",
       "      <td>[Chen Chong, Chen Xiao-Lin, Liu Xiang, Deng We...</td>\n",
       "      <td>2007-04-01 09:45:55</td>\n",
       "      <td>There has been important experimental progress...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0704.0154</td>\n",
       "      <td>Hadrons in Medium – Theory confronts experiment</td>\n",
       "      <td>[Eichstaedt Fabian, Leupold Stefan, Mosel Ulri...</td>\n",
       "      <td>2007-04-02 09:36:31</td>\n",
       "      <td>In this talk we briefly summarize our theoreti...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0704.0200</td>\n",
       "      <td>Electromagnetic polarizabilities and the excit...</td>\n",
       "      <td>[Schumacher Martin]</td>\n",
       "      <td>2007-04-02 14:10:13</td>\n",
       "      <td>The electromagnetic polarizabilities of the nu...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0704.0220</td>\n",
       "      <td>Three Particle Correlations from STAR</td>\n",
       "      <td>[Ulery Jason Glyndwr  for the STAR Collaboration]</td>\n",
       "      <td>2007-04-02 15:45:49</td>\n",
       "      <td>Two-particle correlations have shown modificat...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0704.0224</td>\n",
       "      <td>Are There Mach Cones in Heavy Ion Collisions? ...</td>\n",
       "      <td>[Ulery Jason Glyndwr  for the STAR Collaboration]</td>\n",
       "      <td>2007-04-02 15:55:08</td>\n",
       "      <td>We present results from STAR on 3-particle azi...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          id                                        clean_title  \\\n",
       "0  0704.0075                   Strong decays of charmed baryons   \n",
       "1  0704.0154    Hadrons in Medium – Theory confronts experiment   \n",
       "2  0704.0200  Electromagnetic polarizabilities and the excit...   \n",
       "3  0704.0220              Three Particle Correlations from STAR   \n",
       "4  0704.0224  Are There Mach Cones in Heavy Ion Collisions? ...   \n",
       "\n",
       "                                       clean_authors        created_date  \\\n",
       "0  [Chen Chong, Chen Xiao-Lin, Liu Xiang, Deng We... 2007-04-01 09:45:55   \n",
       "1  [Eichstaedt Fabian, Leupold Stefan, Mosel Ulri... 2007-04-02 09:36:31   \n",
       "2                                [Schumacher Martin] 2007-04-02 14:10:13   \n",
       "3  [Ulery Jason Glyndwr  for the STAR Collaboration] 2007-04-02 15:45:49   \n",
       "4  [Ulery Jason Glyndwr  for the STAR Collaboration] 2007-04-02 15:55:08   \n",
       "\n",
       "                                     clean_abstracts  \n",
       "0  There has been important experimental progress...  \n",
       "1  In this talk we briefly summarize our theoreti...  \n",
       "2  The electromagnetic polarizabilities of the nu...  \n",
       "3  Two-particle correlations have shown modificat...  \n",
       "4  We present results from STAR on 3-particle azi...  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "articles_df.head()[['id','clean_title','clean_authors','created_date','clean_abstracts']]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Graph import\n",
    "After some initial data wrangling, we can go ahead and import the data into Neo4j. The graph schema is quite simple. We have Article and Author nodes, and a WROTE relationship between the two, indicating who are the authors of a particular article."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "from neo4j import GraphDatabase\n",
    "driver = GraphDatabase.driver('bolt://localhost:7687', auth=('neo4j', 'letmein'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Define unique constraints\n",
    "\n",
    "As with most Neo4j projects, it is advisable first to define the unique constraints for nodes. This way, the import will be faster as the unique identifiers of the nodes will be indexed. We will create unique constraints for both the Article and the Author nodes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "with driver.session() as session:\n",
    "    session.run('CREATE CONSTRAINT article IF NOT EXISTS ON (a:Article) ASSERT a.id IS UNIQUE;')\n",
    "    session.run('CREATE CONSTRAINT authors IF NOT EXISTS ON (a:Author) ASSERT a.name IS UNIQUE;')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The dataset and the unique constraints are ready, so we can go ahead and import the graph. An important thing to notice is that when you are using your favorite scripting language with Neo4j Driver to import the data, we never want to run a single transaction for each line but instead want to batch several lines together into a single transaction. In our case, we batch every 2000 lines into a single transaction."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "import_query = \"\"\"\n",
    "\n",
    "UNWIND $data as row\n",
    "CREATE (a:Article)\n",
    "SET a += apoc.map.clean(row,['authors'],[])\n",
    "SET a.date = date(row['date'])\n",
    "WITH a, row.authors as authors\n",
    "UNWIND authors as author\n",
    "MERGE (au:Author{name:author})\n",
    "MERGE (au)-[:WROTE]->(a)\n",
    "\n",
    "\"\"\"\n",
    "\n",
    "import_data = []\n",
    "session = driver.session()\n",
    "for i, row in articles_df.iterrows():\n",
    "    import_data.append({'id':row['id'], 'title':row['clean_title'], 'abstract':row['clean_abstracts'], \n",
    "                        'date':row['created_date'].strftime('%Y-%m-%d'), 'authors':row['clean_authors']})\n",
    "    if ((i % 2000) == 0) and (len(import_data) != 0):\n",
    "        session.run(import_query, {'data':import_data})\n",
    "        import_data = []\n",
    "\n",
    "session.run(import_query, {'data':import_data})\n",
    "session.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Data cleaning"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import seaborn as sns\n",
    "from matplotlib import pyplot\n",
    "\n",
    "def read_query(query):\n",
    "    with driver.session() as session:\n",
    "        result = session.run(query)\n",
    "        return pd.DataFrame([r.values() for r in result], columns=result.keys())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We'll quickly see why this part is titled Data Cleaning. Let's begin by examining the most active authors in the Nuclear Experiments category."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x648 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = read_query(\"\"\"\n",
    "MATCH (a:Author)\n",
    "RETURN a.name as author, size((a)-[:WROTE]->()) as number_of_articles\n",
    "ORDER BY number_of_articles DESC LIMIT 10\n",
    "\"\"\")\n",
    "\n",
    "fig, ax = pyplot.subplots(figsize=(16,9))\n",
    "ax = sns.barplot(x=\"author\", y=\"number_of_articles\", data=data, color=\"blue\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "I wasn't aware of this before, but it looks like that a collaboration like ALICE or STAR can be an author of an article. Let's explore the collaborations a bit more and take a look at the most active collaborations overall."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Text(0, 0, 'ALICE Collaboration'),\n",
       " Text(1, 0, 'STAR Collaboration'),\n",
       " Text(2, 0, 'CMS Collaboration'),\n",
       " Text(3, 0, 'PHENIX Collaboration'),\n",
       " Text(4, 0, 'ATLAS Collaboration'),\n",
       " Text(5, 0, 'Collaboration the CLAS'),\n",
       " Text(6, 0, 'NA49 Collaboration'),\n",
       " Text(7, 0, 'WA98 Collaboration'),\n",
       " Text(8, 0, 'CLAS Collaboration'),\n",
       " Text(9, 0, 'The STAR Collaboration')]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7wAAAJPCAYAAABfMtg0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABrY0lEQVR4nO3debzuU/XA8c/imsqcSzJkSAMlhJBKKmNREfpVmqUkU4oGKpWxKKJIRaOxIlJRIpKhZBaFkNBgSub1+2Ptx31cF/fcMzznfO/n/Xqd133Gc/f5nu/5PnvtvfbakZlIkiRJktQ1swy6AZIkSZIkjQYDXkmSJElSJxnwSpIkSZI6yYBXkiRJktRJBrySJEmSpE4y4JUkSZIkddKkQTdguBZaaKFcaqmlBt0MSZIkSdIouOiii/6ZmZNn5L0TPuBdaqmluPDCCwfdDEmSJEnSKIiIG2b0vaY0S5IkSZI6yYBXkiRJktRJBrySJEmSpE4y4JUkSZIkdZIBryRJkiSpkwx4JUmSJEmdZMArSZIkSeokA15JkiRJUicZ8EqSJEmSOsmAV5IkSZLUSQa8kiRJkqROMuCVJEmSJHWSAa8kSZIkqZMMeCVJkiRJnWTAK0mSJEnqJANeSZIkSVInGfBKkiRJkjrJgFeSJEmS1EkGvJIkSZKkTjLglSRJkiR1kgGvJEmSJKmTJg26AWNh6aWvH3QTxq3rrltq0E2QJEmSpFHhDK8kSZIkqZMMeCVJkiRJnWTAK0mSJEnqJANeSZIkSVInGfBKkiRJkjrJgFeSJEmS1EkGvJIkSZKkTjLglSRJkiR1kgGvJEmSJKmTDHglSZIkSZ1kwCtJkiRJ6iQDXkmSJElSJxnwSpIkSZI6yYBXkiRJktRJBrySJEmSpE4y4JUkSZIkdZIBryRJkiSpkwx4JUmSJEmdZMArSZIkSeokA15JkiRJUicZ8EqSJEmSOsmAV5IkSZLUSQa8kiRJkqROMuCVJEmSJHWSAa8kSZIkqZMMeCVJkiRJnWTAK0mSJEnqJANeSZIkSVInGfBKkiRJkjrJgFeSJEmS1EkGvJIkSZKkTjLglSRJkiR1kgGvJEmSJKmTDHglSZIkSZ1kwCtJkiRJ6iQDXkmSJElSJxnwSpIkSZI6yYBXkiRJktRJBrySJEmSpE4y4JUkSZIkdZIBryRJkiSpkwx4JUmSJEmdZMArSZIkSeokA15JkiRJUicZ8EqSJEmSOsmAV5IkSZLUSQa8kiRJkqROMuCVJEmSJHWSAa8kSZIkqZMMeCVJkiRJnTSqAW9ELBERv46IKyLi8ojYoT3+6Yi4OSIubl8b9b1n94i4NiKujoj1R7N9kiRJkqTumjTK3/8hYJfM/ENEzANcFBG/bM8dmJkH9L84IpYHtgJWAJ4FnB4Rz83Mh0e5nZIkSZKkjhnVGd7MvCUz/9Bu3w1cCSz2JG/ZFPhhZt6fmdcB1wKrj2YbJUmSJEndNGZreCNiKWBl4PftoQ9FxCUR8c2IWKA9thhwY9/bbmIaAXJEbBMRF0bEhbfffvtoNluSJEmSNEGNScAbEXMDJwA7ZuZdwGHAssBKwC3AF4fy/TLz8MxcNTNXnTx58kg3V5IkSZLUAaMe8EbEbFSw+73MPBEgM2/NzIcz8xHgCKakLd8MLNH39sXbY5IkSZIkDcloV2kO4Ejgysz8Ut/ji/a97I3AZe32ScBWETFHRCwNLAecP5ptlCRJkiR102hXaX4Z8Hbg0oi4uD32ceAtEbESkMD1wPsBMvPyiDgWuIKq8LydFZolSZIkSTNiVAPezPwtENN46tQnec/ngc+PWqMkSZIkSTOFMavSLEmSJEnSWDLglSRJkiR1kgGvJEmSJKmTDHglSZIkSZ1kwCtJkiRJ6iQDXkmSJElSJxnwSpIkSZI6yYBXkiRJktRJBrySJEmSpE4y4JUkSZIkdZIBryRJkiSpkwx4JUmSJEmdZMArSZIkSeokA15JkiRJUicZ8EqSJEmSOsmAV5IkSZLUSQa8kiRJkqROMuCVJEmSJHWSAa8kSZIkqZMMeCVJkiRJnWTAK0mSJEnqJANeSZIkSVInGfBKkiRJkjrJgFeSJEmS1EkGvJIkSZKkTjLglSRJkiR1kgGvJEmSJKmTDHglSZIkSZ1kwCtJkiRJ6iQDXkmSJElSJxnwSpIkSZI6yYBXkiRJktRJBrySJEmSpE4y4JUkSZIkdZIBryRJkiSpkwx4JUmSJEmdZMArSZIkSeokA15JkiRJUicZ8EqSJEmSOsmAV5IkSZLUSQa8kiRJkqROMuCVJEmSJHWSAa8kSZIkqZMMeCVJkiRJnWTAK0mSJEnqJANeSZIkSVInGfBKkiRJkjrJgFeSJEmS1EkGvJIkSZKkTjLglSRJkiR1kgGvJEmSJKmTDHglSZIkSZ1kwCtJkiRJ6iQDXkmSJElSJxnwSpIkSZI6yYBXkiRJktRJBrySJEmSpE4y4JUkSZIkdZIBryRJkiSpkwx4JUmSJEmdZMArSZIkSeokA15JkiRJUicZ8EqSJEmSOsmAV5IkSZLUSQa8kiRJkqROMuCVJEmSJHWSAa8kSZIkqZMMeCVJkiRJnWTAK0mSJEnqJANeSZIkSVInGfBKkiRJkjrJgFeSJEmS1EkGvJIkSZKkThrVgDciloiIX0fEFRFxeUTs0B5fMCJ+GRHXtH8XaI9HRHwlIq6NiEsiYpXRbJ8kSZIkqbtGe4b3IWCXzFweWAPYLiKWB3YDzsjM5YAz2n2ADYHl2tc2wGGj3D5JkiRJUkeNasCbmbdk5h/a7buBK4HFgE2Bo9rLjgLe0G5vChyd5Txg/ohYdDTbKEmSJEnqpjFbwxsRSwErA78HFsnMW9pT/wAWabcXA27se9tN7TFJkiRJkoZkTALeiJgbOAHYMTPv6n8uMxPIIX6/bSLiwoi48Pbbbx/BlkqSJEmSumLUA96ImI0Kdr+XmSe2h2/tpSq3f29rj98MLNH39sXbY4+RmYdn5qqZuerkyZNHr/GSJEmSpAlrtKs0B3AkcGVmfqnvqZOAd7Tb7wB+0vf41q1a8xrAnX2pz5IkSZIkTbdJo/z9Xwa8Hbg0Ii5uj30c2Ac4NiLeA9wAbNGeOxXYCLgWuBd41yi3T5IkSZLUUaMa8Gbmb4F4gqdfPY3XJ7DdaLZJkiRJkjRzGLMqzZIkSZIkjSUDXkmSJElSJxnwSpIkSZI6yYBXkiRJktRJBrySJEmSpE4y4JUkSZIkdZIBryRJkiSpkwx4JUmSJEmdZMArSZIkSeokA15JkiRJUicZ8EqSJEmSOsmAV5IkSZLUSQa8kiRJkqROMuCVJEmSJHWSAa8kSZIkqZMMeCVJkiRJnWTAK0mSJEnqJANeSZIkSVInGfBKkiRJkjpp0qAboG5YeunrB92Ece2665YadBMkSZKkmY4zvJIkSZKkTjLglSRJkiR1kgGvJEmSJKmTDHglSZIkSZ1kwCtJkiRJ6iQDXkmSJElSJxnwSpIkSZI6yYBXkiRJktRJBrySJEmSpE4y4JUkSZIkdZIBryRJkiSpkwx4JUmSJEmdZMArSZIkSeokA15JkiRJUidNd8AbEW+OiHna7U9GxIkRscroNU2SJEmSpBk3lBneT2Xm3RGxNvAa4EjgsNFpliRJkiRJwzOUgPfh9u/GwOGZeQow+8g3SZIkSZKk4RtKwHtzRHwd2BI4NSLmGOL7JUmSJEkaM0MJWLcAfg6sn5l3AAsCu45GoyRJkiRJGq7pDngz817gNmDt9tBDwDWj0ShJkiRJkoZrKFWa9wQ+BuzeHpoN+O5oNEqSJEmSpOEaSkrzG4FNgP8CZObfgXlGo1GSJEmSJA3XUALeBzIzgQSIiKePTpMkSZIkSRq+oQS8x7YqzfNHxPuA04EjRqdZkiRJkiQNz6TpfWFmHhARrwXuAp4H7JGZvxy1lkmSJEmSNAzTHfACtADXIFeSJEmSNO49ZcAbEXdT63aj/fvoU0Bm5ryj1DZJkiRJkmbYUwa8mWklZkmSJEnShDOUfXjXiIh5+u7PExEvHZ1mSZIkSZI0PEOp0nwYcE/f/f+2xyRJkiRJGneGEvBG24cXgMx8hCEWvZIkSZIkaawMJeD9a0R8OCJma187AH8drYZJkiRJkjQcQwl4twXWAm4GbgJeCmwzGo2SJEmSJGm4pjslOTNvA7YaxbZIkiRJkjRipmcf3o9m5n4RcTCP3YcXgMz88Ki0TJIkSZKkYZieGd4r278XjmZDJEmSJEkaSU8Z8Gbmye3mvZl5XP9zEfHmUWmVJEmSJEnDNJSiVbtP52OSJEmSJA3c9Kzh3RDYCFgsIr7S99S8wEOj1TBJkiRJkoZjetbw/p1av7sJcFHf43cDO41GoyRJkiRJGq7pWcP7p4i4DFg/M48agzZJkiRJkjRs07WGNzMfBpaIiNlHuT2SJEmSJI2I6Ulp7rkOOCciTgL+23swM7804q2SJEmSJGmYhhLw/qV9zQLMMzrNkSRJkiRpZEx3wJuZnxnNhkiSJEmSNJKmO+CNiMnAR4EVgDl7j2fmuqPQLkmSJEmShmW6ilY13wOuApYGPgNcD1wwCm2SJEmSJGnYhhLwPiMzjwQezMzfZOa7AWd3JUmSJEnj0lCKVj3Y/r0lIjYG/g4sOPJNkiRJkiRp+IYS8H4uIuYDdgEOBuYFdhqVVkmSJEmSNExDqdL803bzTuBVUz8fEbtn5t4j1TBJkiRJkoZjKGt4n8qbR/B7SZIkSZI0LCMZ8MYIfi9JkiRJkoZlJAPenPqBiPhmRNwWEZf1PfbpiLg5Ii5uXxv1Pbd7RFwbEVdHxPoj2DZJkiRJ0kxmtGd4vw1sMI3HD8zMldrXqQARsTywFbBCe8+hETHrCLZPkiRJkjQTecqANyL2bf8+1Rrd46Z+IDPPAv49nW3ZFPhhZt6fmdcB1wKrT+d7JUmSJEl6jOmZ4d0oIgLY/clelJlfGML/+6GIuKSlPC/QHlsMuLHvNTe1xyRJkiRJGrLpCXhPA/4DrBgRd0XE3f3/zsD/eRiwLLAScAvwxaF+g4jYJiIujIgLb7/99hlogiRJkiSp654y4M3MXTNzfuCUzJw3M+fp/3eo/2Fm3pqZD2fmI8ARTElbvhlYou+li7fHpvU9Ds/MVTNz1cmTJw+1CZIkSZKkmcB0F63KzE0jYpGIeF37mqFIMyIW7bv7RqBXwfkkYKuImCMilgaWA86fkf9DkiRJkqRJ0/vCVrTqAOBMqiLzwRGxa2Ye/yTv+QGwDrBQRNwE7AmsExErUdsYXQ+8HyAzL4+IY4ErgIeA7TLz4aH/SJIkSZIkDSHgBT4JrJaZtwG0Gd7TgScMeDPzLdN4+Mgnef3ngc8PoU2SJEmSJE3TUPbhnaUX7Db/GuL7JUmSJEkaM0OZ4T0tIn4O/KDd3xI4deSbJEmSJEnS8E13wJuZu0bEm4C120OHZ+aPRqdZkiRJkiQNz1BmeMnME4ETp/VcRPwuM9cckVZJkiRJkjRMI7kGd84R/F6SJEmSJA3LSAa8OYLfS5IkSZKkYbHKsiRJkiSpk0Yy4I0R/F6SJEmSJA3LdAW8ETFrRPz6KV729hFojyRJkiRJI2K6At7MfBh4JCLme5LXXDZirZIkSZIkaZiGsi3RPcClEfFL4L+9BzPzwyPeKkmSJEmShmkoAe8T7sErSZIkSdJ4M90Bb2YeFRFzAUtm5tWj2CZJkiRJkoZtuqs0R8TrgYuB09r9lSLipFFqlyRJkiRJwzKUbYk+DawO3AGQmRcDy4x4iyRJkiRJGgFDCXgfzMw7p3rskZFsjCRJkiRJI2UoRasuj4j/A2aNiOWADwPnjk6zJEmSJEkanqHM8G4PrADcD/wAuAvYcRTaJEmSJEnSsA2lSvO9wCciYt+6m3ePXrMkSZIkSRqeoVRpXi0iLgUuAS6NiD9FxEtGr2mSJEmSJM24oazhPRL4YGaeDRARawPfAlYcjYZJkiRJkjQcQ1nD+3Av2AXIzN8CD418kyRJkiRJGr6nnOGNiFXazd9ExNepglUJbAmcOXpNkyRJkiRpxk1PSvMXp7q/Z9/tHMG2SJIkSZI0Yp4y4M3MV41FQyRJkiRJGknTXbQqIuYHtgaW6n9fZn54xFslSZIkSdIwDaVK86nAecClwCOj0xxJkiRJkkbGUALeOTNz51FriSRJkiRJI2go2xJ9JyLeFxGLRsSCva9Ra5kkSZIkScMwlBneB4D9gU8wpTpzAsuMdKMkSZIkSRquoQS8uwDPycx/jlZjJEmSJEkaKUNJab4WuHe0GiJJkiRJ0kgaygzvf4GLI+LXwP29B92WSJIkSZI0Hg0l4P1x+5IkSZIkadyb7oA3M48azYZIkiRJkjSSpjvgjYjrmFKd+VGZaZVmSZIkSdK4M5SU5lX7bs8JvBlwH15JkiRJ0rg03VWaM/NffV83Z+ZBwMaj1zRJkiRJkmbcUFKaV+m7Ows14zuUGWJJkiRJksbMUALWLzJlDe9DwPVUWrMkSZIkSePOUALeDYHNgKX63rcV8NkRbpMkSZIkScM21H147wD+ANw3Go2RJEmSJGmkDCXgXTwzNxi1lkiSJEmSNIKmu0ozcG5EvGjUWiJJkiRJ0ggaygzv2sA7I+I64H4ggMzMFUelZZIkSZIkDcNQi1ZJkiRJkjQhTHfAm5k3jGZDJEmSJEkaSUNZwytJkiRJ0oRhwCtJkiRJ6iQDXkmSJElSJxnwSpIkSZI6yYBXkiRJktRJBrySJEmSpE4y4JUkSZIkdZIBryRJkiSpkwx4JUmSJEmdZMArSZIkSeokA15JkiRJUicZ8EqSJEmSOsmAV5IkSZLUSQa8kiRJkqROMuCVJEmSJHWSAa8kSZIkqZMMeCVJkiRJnWTAK0mSJEnqJANeSZIkSVInGfBKkiRJkjrJgFeSJEmS1EkGvJIkSZKkTjLglSRJkiR1kgGvJEmSJKmTDHglSZIkSZ1kwCtJkiRJ6iQDXkmSJElSJ41qwBsR34yI2yLisr7HFoyIX0bENe3fBdrjERFfiYhrI+KSiFhlNNsmSZIkSeq20Z7h/TawwVSP7QackZnLAWe0+wAbAsu1r22Aw0a5bZIkSZKkDhvVgDczzwL+PdXDmwJHtdtHAW/oe/zoLOcB80fEoqPZPkmSJElSdw1iDe8imXlLu/0PYJF2ezHgxr7X3dQee5yI2CYiLoyIC2+//fbRa6kkSZIkacIaaNGqzEwgZ+B9h2fmqpm56uTJk0ehZZIkSZKkiW4QAe+tvVTl9u9t7fGbgSX6Xrd4e0ySJEmSpCEbRMB7EvCOdvsdwE/6Ht+6VWteA7izL/VZkiRJkqQhmTSa3zwifgCsAywUETcBewL7AMdGxHuAG4At2stPBTYCrgXuBd41mm2TJEmSJHXbqAa8mfmWJ3jq1dN4bQLbjWZ7JEmSJEkzj4EWrZIkSZIkabSM6gyvpJG19NLXD7oJ49Z11y016CZIkiRpnHGGV5IkSZLUSQa8kiRJkqROMuCVJEmSJHWSAa8kSZIkqZMMeCVJkiRJnWTAK0mSJEnqJANeSZIkSVInGfBKkiRJkjrJgFeSJEmS1EkGvJIkSZKkTjLglSRJkiR1kgGvJEmSJKmTDHglSZIkSZ1kwCtJkiRJ6iQDXkmSJElSJxnwSpIkSZI6yYBXkiRJktRJBrySJEmSpE4y4JUkSZIkdZIBryRJkiSpkwx4JUmSJEmdZMArSZIkSeokA15JkiRJUicZ8EqSJEmSOsmAV5IkSZLUSQa8kiRJkqROMuCVJEmSJHWSAa8kSZIkqZMMeCVJkiRJnWTAK0mSJEnqJANeSZIkSVInGfBKkiRJkjrJgFeSJEmS1EkGvJIkSZKkTjLglSRJkiR1kgGvJEmSJKmTDHglSZIkSZ1kwCtJkiRJ6iQDXkmSJElSJxnwSpIkSZI6yYBXkiRJktRJBrySJEmSpE6aNOgGSNJ4svTS1w+6CePWddctNegmSJIkDYkzvJIkSZKkTjLglSRJkiR1kgGvJEmSJKmTDHglSZIkSZ1kwCtJkiRJ6iQDXkmSJElSJxnwSpIkSZI6yYBXkiRJktRJBrySJEmSpE4y4JUkSZIkdZIBryRJkiSpkwx4JUmSJEmdZMArSZIkSeokA15JkiRJUicZ8EqSJEmSOsmAV5IkSZLUSQa8kiRJkqROMuCVJEmSJHXSpEE3QJI0c1l66esH3YRx7brrlhp0EyRJ6gxneCVJkiRJnWTAK0mSJEnqJANeSZIkSVInGfBKkiRJkjrJgFeSJEmS1EkGvJIkSZKkTjLglSRJkiR1kgGvJEmSJKmTDHglSZIkSZ00aVD/cURcD9wNPAw8lJmrRsSCwDHAUsD1wBaZ+Z9BtVGSJEmSNHENeob3VZm5Umau2u7vBpyRmcsBZ7T7kiRJkiQN2aAD3qltChzVbh8FvGFwTZEkSZIkTWSDDHgT+EVEXBQR27THFsnMW9rtfwCLDKZpkiRJkqSJbmBreIG1M/PmiFgY+GVEXNX/ZGZmROS03tgC5G0AllxyydFvqSRJkiRpwhnYDG9m3tz+vQ34EbA6cGtELArQ/r3tCd57eGaumpmrTp48eayaLEmSJEmaQAYS8EbE0yNint5tYD3gMuAk4B3tZe8AfjKI9kmSJEmSJr5BpTQvAvwoInpt+H5mnhYRFwDHRsR7gBuALQbUPkmSJEnSBDeQgDcz/wq8eBqP/wt49di3SJIkSZLUNeNtWyJJkiRJkkaEAa8kSZIkqZMMeCVJkiRJnWTAK0mSJEnqJANeSZIkSVInGfBKkiRJkjrJgFeSJEmS1EkGvJIkSZKkTjLglSRJkiR1kgGvJEmSJKmTDHglSZIkSZ1kwCtJkiRJ6iQDXkmSJElSJxnwSpIkSZI6yYBXkiRJktRJBrySJEmSpE4y4JUkSZIkdZIBryRJkiSpkwx4JUmSJEmdZMArSZIkSeokA15JkiRJUicZ8EqSJEmSOsmAV5IkSZLUSQa8kiRJkqROMuCVJEmSJHWSAa8kSZIkqZMMeCVJkiRJnWTAK0mSJEnqJANeSZIkSVInGfBKkiRJkjrJgFeSJEmS1EkGvJIkSZKkTjLglSRJkiR1kgGvJEmSJKmTJg26AZIkaWQtvfT1g27CuHbddUsNugmSpDHiDK8kSZIkqZMMeCVJkiRJnWTAK0mSJEnqJANeSZIkSVInGfBKkiRJkjrJgFeSJEmS1EkGvJIkSZKkTjLglSRJkiR1kgGvJEmSJKmTJg26AZIkSRPR0ktfP+gmjFvXXbfUiHwfj/ETG6ljLHWdM7ySJEmSpE5yhleSJEmaSTmL/uScSZ/4nOGVJEmSJHWSAa8kSZIkqZNMaZYkSZKkUWTq+BMb7bRxZ3glSZIkSZ1kwCtJkiRJ6iQDXkmSJElSJxnwSpIkSZI6yYBXkiRJktRJBrySJEmSpE4y4JUkSZIkdZIBryRJkiSpkwx4JUmSJEmdZMArSZIkSeokA15JkiRJUicZ8EqSJEmSOsmAV5IkSZLUSQa8kiRJkqROMuCVJEmSJHWSAa8kSZIkqZMMeCVJkiRJnWTAK0mSJEnqJANeSZIkSVInGfBKkiRJkjrJgFeSJEmS1EkGvJIkSZKkTjLglSRJkiR10rgLeCNig4i4OiKujYjdBt0eSZIkSdLENK4C3oiYFfgqsCGwPPCWiFh+sK2SJEmSJE1E4yrgBVYHrs3Mv2bmA8APgU0H3CZJkiRJ0gQ03gLexYAb++7f1B6TJEmSJGlIJg26ATMiIrYBtml374mIqwfZnhmwEPDPQTcCIGLQLRg14+YYQ2ePs8d4bIyb4+wxHhsdPc4e49HnMR4b4+Y4e4zHRkeP80Q8xs+e0e8/3gLem4El+u4v3h57jMw8HDh8rBo10iLiwsxcddDt6DKP8ejzGI8Nj/Po8xiPPo/x6PMYjw2P8+jzGI++me0Yj7eU5guA5SJi6YiYHdgKOGnAbZIkSZIkTUDjaoY3Mx+KiA8BPwdmBb6ZmZcPuFmSJEmSpAloXAW8AJl5KnDqoNsxyiZsOvYE4jEefR7jseFxHn0e49HnMR59HuOx4XEefR7j0TdTHePIzEG3QZIkSZKkETfe1vBKkiRJkjQiDHglSZIkSZ1kwCsAImLWQbdBmhERHd0hT9JARcSmEfGSQbdD0mBFhPHSBOcvcCbX+yPOzIcjYlJEzNYeN4gYAV4kR1dEzJJTFSLw3B1bDpaNjihePwYgItaMiF8C2wGLDLo9E9XU1wavzaPH6/Do6OsjPzLotszsImKW4VxD/DCdyfX+iCPig9Q+yAdGxLMzM/1wGp4WjPWO7ysj4qURMd+g29UlmflIuwh+IiJ2j4i5pw6ANToiYhI8Olg2f0SsMeg2dUVEzJrlkYh4TkQsP+g2zSwiYmFgH+B7mble2znCwcsh6B9Ib/dfFRGze20eeb1At12H54yIlQfdpq6IiOjrw706Ig5u/Tj7xmOs159usckKEbHAUL+HF/CZTJs1iL77z4+IjwCrA28FHgCOBvDDaXhaZ3W+iNgD+CY1W/CNATdrQpv6gyYiXg18B1gCeBnwiYhYZhBtm9lk5kMAEfFa4Hxg/4j4bEQsMdiWTXyt8zp7RLwL+DWwb0R8LCJmH3TbZgLLA9dm5rcBImL5iJgfmGuQjZpI+oKEZSPiJOBrwAERsdFgW9Y9fYMKGwMXAUdExIciYtHBtmzia8HVAhGxJ/Bh4EFgb2C9wbZs5tP60wtExH7AKcDX2jk/3Qx4ZyJ9swbZl/7yImBL4M+ZeUVm7gw8JyI2ae/xHJlO00jfeiH1h7lQZi4LvBd4VkS8dxDtm+h652/f/aWATwCzZua21AfSfMDaBgYjrz+dqI2bzRoRvwfeBbwCeA8wB/DuATZzQpr6OhsRiwA3AM8BlgH2A5aiBiU1giJi/YjYtO+hq4GXRcSXIuIs4NPAb4Fj2uyvpmEan38fBX4GHAKsAFwDbB4RkwfQvM6YeqlDRMwREUcD2wDrANsDzwU2nfZ30BOZxjk8CdiK6lts0/rHvwReadbN6JrG72Il4Bzg5sxcihpkf3VErDa939NgZiYQj12nO0tEfAb4akS8MTOPA34BzBoRi7W3fAz4cnuP6xamQ0u36I20rtbuXwZcDkyOiHky8wHg88COvXRQTb92/j4zIraKiBdl5vXA96kBmnkz86/An4AXAysNsKmdM1U60cLAvO18PwlYNzP/AfwVOANYJiLWGmR7J5Kplj4sERGTMvNW4PfA2pn5IHApcDbV0VrsSb6dhiAilgSOBA6KiJdHxEKZeQs1eHMH8D3gKGAzYF6q8+ta1Glo1+doxxTgGGBZ4H8tG+TXwH+Atw2qjRNdu1b0ljrMExFzZeb91LV3lcy8PTN/B/wBeF5ErDLYFk8cbUC914d7Y0SsA8wJ/Ai4Anhze+kxwALASyPCrI9R0FLJe7+LhdrD1wCzA89o908G7gHWjVZ76KkY8HZYRCwSER8DXtDuP406SZ5FdUw/FBG7UulGLwBe2E607wL3RcTrB9T0CSEiluqNLrUPoBUj4nTgICqtaCvgs8Ci1CwNbT3YDdSot55EROzcP3oXEW+mOv0vA05q988BfkONagMcCywErBkRc45xkzulpdQuBo+e37NFxNeBE4FvRsT6mfl54L8R8X+tU3sZ1TnYdnAtH/8iYnJELAiPHttFW+rnUcA3ImJF4B3AqhHxnMy8g+rE/hv40KDa3TWZ+TdqxuYm4LXUgCSZeU5mfjYzv56Zp2Tm1cAJtAJWLveBiHhu/yxMRLybGqT5ekTskJk3APsCn2ovuZq6Vq/TZms0HdokxXzw6LUiIuJAqi/37XYsDwKujYit29t+C/wXeJOD69PWG5yJiP3h0QGbRSLiRGAH6jr7HSpr7IvAayNichtY/yM1m77sYFrfPVEZe8CjqeQrRsSZVF/6C0BQ/bxN2qDwn6nPxKWB6UptNuDtoIiYo938N/BV4O+tczVne+wDbWb37cDHgbuoglUbAM9v731JZp48pg2fQKJSZl8J3Nb38JuBkzPzZVTgtRv1R/pz4F1R68AAdgROG7PGTjB9syfnUzNbPRsBH83M7YFdgZcDzwROpUZbX5iZ/6EGE47KzPvGsNldtB1TrgcAWwCTMnNtauDhTRHxKmo2bF+AzPw7cC7w86lTkvQYuwL9qZ3vB87PzHWBv1Ef7PNRA2a9df/XAKdTx1czqHd9aR3eoNY9/hA4HFgyInaNSinvFbAiInamfkdnDKbV40vUVk2bU59vRNVN2IxaHvUFYNmI2CMzPw4sHxHrtUyFy6mskH8OpuUT0m7Aun3330cN6r6amtl9N7AatbZ0u4iYLTOvpT47r6T9jvRYbab8b8CPYkqK+ErALJm5TmZuDtxMDYRdCfyFCoShMj++0rL4NEytP71/r48cEc+glqsdQfVDnkP1my8DLgQ+0956DnAVNWD5lAx4O6alE/VGOx6hRj8+DWwNJLXWbl54tHN6CvA6Km1jdmpUkMy8dyzbPVG0mZi5W3ry0cDCEfF/7en1gIsBMvPnwPFUx/Vg4FXAWm0G/ZrM/PGYN36ci1qLtG7f7Mk5wGcj4hPt/v1UEEBmHk+dxysAZwHXUecxmXlBmxHTEPXS5NrdLwN/7ktPfhnwr3b729QswvqZeSbwj4j4anvunMz8Xi8lSSWqknVvMHI34OkR8bx2/zXUzDjA14FrgY0zc19qMOfN7Xj+zIHIoYuIlSNix95deLTDm1Tw8IzMvIk6pz8OfKl1vlZtswxrA5tm5q/Guu3jRcvwmAcgMy+iBrnWbwNbSwDPzszrMvNs4AfAEm1m8jPUADCZ+ZfMPLIdaz2BiJi7b+B3b+C8iHhxu78CcEO7HuxLZYy9kJo9vwU4oL3u+HYdfnAMmz7uRcQLe7OJLdC9nrreQvWZ746IZ7X7JwNvaq/5GbBKRCyamf9tfwMahoh4OkBmPpCZb6YGbqCu0c8HftPilC9RqcwLU/3pd0fEci2F/6DMvHB6/j8D3u5JquDGT4GfUkHsedRF8hEqLeuIvtfPClyRmddn5nZtxEvT0C6Cr6WO7wbAmsCGwBqtc3QsNXPTczNwT2beQ3WizjMV7om1tUi7RlWY/Ax1bE8Btm8f/tcDC0XEcu0tvwcWbR/on83MfQbR7q5oge57qI7qMlS12o2BPVqGyGnAfBGxSBtQeBhYvL39/9rzrvufhqiKqe8Dnha1fdMzqLTv7VsQfCywWhsQu5kazHlme/tmwJ/BVNqhioiFW0A2G1U7YamcspVZL6A4npoZ+xXwRupc/ld7/CZg+8x8U2ZeM4ifYRzZkApwZ4uqjrooFVytRc1+/T4i1m+vvYaalVkgM4+gpTX3HXM9gXY92JkaTJ+H6vhvSqXXQg2qP9QCrzuAu4GXtc/PPakU/UerN+txnkkVoFsPOLIFVP+N2przKuA+qr/cm7iYFViQGljfsq3x1zC1AZwd2+1XtYcPi4htqXP611Qfm8w8D1gFeFZm/gnYHbhzqNcTA94Jrn1w9/8e76Bmup4HHNBGoc4HbqVSsnYF5oqIIyPiImrW7C9+ED2xmFL06+9UQaTDgf2pUcEfUqXqt6LWQi8eETu0P+a3UkU6aOvA/j2A5o9rvbTXvvTXPwJfoar9/jwzf0Ot09ibOr5LAvtFVQDdmZZimJn/QjOk7/z+HzVAdgrVaVo9M79GbVW2EXAjdX3Zu711ReDWqEIq1zjz+Hh9x/YW6trxWyodbnEq9fP5wEupYmvPpAoGQq0Nu7W999T2Ia/pFBFzRcTe1EDCptS1+jvAXlCDMn2DB7dRqbZnZeaqmfmzzPwwcEhmXpKZl07jv5gp9KV9Q6V17kelFL6nzdL+kEpjnpMagPxoSwNfhepbAJCZB7d/HbB5Ar1j3QLXh6jjfA7wqnYdvi+qbsXF1IDYzu2tzwKuaNfhP2XmTwfQ/HFtqj7y76gq1l+lZg6hBnr3oq65v6fq23wqIk6hBnP+lZn3Z+bdY9jsTupdT9pn2rsj4kJg74iYm6qG/X5qC7irgQ0i4jXtuXuA29t7v52Ztw31emLAO8G1D+5HWprGqu0PcjMq5XCV9pq/UBfO5ahO7EbUH/t2mfnOzLzLD6LHiykbuj8SU6rAXUulEH2p/cH9meqsvoD64HkX1XH9KnBcZlqc6glEX2VrWqoylZb1O+C+vufeQ10E56FGBE+hqiTO1CmGw9Wb5ZpqRraX4fHFzPxmu/0NqlN7D3AglYr7c2q5xOec0X28vkD3kb7O1hXA04F3ZeYfs6qM/5KqpXAltfZ8tYj4HXBjZh469i2f+CJiVSqraXZqKc9v2mDjYcALImLd9rpeUbu7qBS677bH5wKY2ZedRN82hu2hXjXg6zPzTe2xL1KDNi+k+hy/p1IOvwB8vp3jehItzp1lqmN9G9U//3rfdeAz1LrGa6lr8jJRRTJfQg3OeB2eylTX4TlbP25+YB9g/t5gVmaeD/yK6td9gxrUnQM4MTPfnbWETcPQ15/OiJgUtW73AqrfvFZm3pNTirpuT2WingvsRA0U/6rN9M54G4xzJp54bPn0uagZsZdQ6w2el5lbtZTbNwPfzsyzo6qtvovqcH0qq6KqpqEFAf37ve5IHd/vUhfF9amCET/JzDNbumdvtHW/zLyr/3ekx4rHbsOyHNVBugO4PDP3iioYcw3w4sy8rr3ui8CGmenedyMsao3u5tR2CxdS6823Bz4K/CUzH4qIbwH/yMzdo6p+zmvGwlNrMzKrUalzV0fEDlSq+Gcz8+bWAfsJ8KPMPKKlM87uTMKMi4j3UZ3Z/afx3LZUWuKr+h5bhEpfPjEzDxy7lo5/UUt1dqGuxydT6Z4/ogYPfpWZd0fEO6lB9g9k5k0RMX9aQ2HIorYQWp9ap39xRGwIfI4qjnlfuw7/BLg2M3eJWv84f9YSCPXp72O0+7tSn3GXUEHtle1Y3p6Z722vmY/KyFstXZ87aqKquU8Cjs3MOyLix8BFmblXe345ar30GzLzsoh4JnBny0AbFmd4J5C+VIBesLsGsDpwdWauQq07ek1E7JKZp1GjsW9pf+wbUx9UnzTYnba+lKJs958VtRb6eVQRjvdTW4WcTqUxr9Te+hA1Q3MDta7R9TPTMNWM+axRhSO+BxwKfJBav/uerD1Iv03NJhIRb8nMXajZBNeBDUN/aldL+/wcldZ1BZVO+67MPJ364N+071qxHzU79ozMfMhg9/GmOrbPjIijqBnGG4B9otaMfZ2aGV8dIGv9+eHAyhExh2lzI+INVDZC/44FPUcB90fEm9r5/wtqm60PzuzB7tTX1Yh4A3AmcCewBrU+FCo1fGuqJgiZ+W3gf9SaXQx2n9pU14rZo7ZdOYLKNvhqRLw+M39GFaHase86vAO1Pc58WYWTDHb79M2W9we7hwDPzcyXUhM+B0fEAsA2wP9FrfN/BZWWvylwu32M4ev9Lvruv7hlhr2CWrLz9fZ72I3axWRhgKxaCcdTWWVk5j9GItgFZ3gnpKjKngdSszGHUsHX16iCVd+lOrBrUWvv9qTWK2xnetH0iYilqfW351FrOv5MHecXUsd6ayoN4y1UZebfAzuk60inS0S8lSo1vza1NcsK1PqZe6nBg22p1NqzgLmpFOftHUQYORHxLqrE/9LAcVQ2yEHUdkNfoopG7E+l1q0LrJqZtw+ksRNI1Fqjzai0w/kz85SI+CTVufo5sAd1bd6SOrfnAdZNK6kOW6+jG7WF0DKZ+bj9ils2zkrUoOU/gMMz89Nj2tBxaKqB3vWpAHYR6jNwFmqw/B5qmc7BEXEM9dn4ZupafrLn8NBFxFuoa+5GwLeozLHvUdeKT1Fp+cdRW++9nvrMvMPPwicXEYtTx/PL1Dn8CLXH9ouofvKPMvNLEbE7sAl1nLfNzAsG1OTOahMby1DHfRJ17T2c6jsfmpn7RsSXqQrMCwBXZeaOo9IWA97xberU2IjYjKr2eWVm7tQeWxnYJjM/0FKcL6EqL29qau2T6+skzUKt49qaSiH6TWZ+q6UcfpPa9uaz1AzBPzNzh6gtoNbMzGMG1f7xrI2SPrpGNCLmpbbIei6we2Ze2kb4vgnsm5nnRcSlwNmZ+cGImAzMkW5hMcN6Hdm+83wTYGVqhHUbagBnF2BVKn3u/dRavd2oGZt1qBS76wbR/vGs79jOmpkPR8Q21DF7JDN3i1ojegg1a/NtavDxrMz8ckSsSf0evjVSo9czk6lncaZ6blOqM/WjzDw9al/SByNiCWrQ8ufUZ+hPMvMfY9fq8WeqQHdJ6vNvZWCvlla7GjUQ9nlqcHJz4CPUQNjGwH8y85RBtH0i6T/O7f5a1L7my1BVwe+nrsNrUtfhXYFL2xKfl1Nbwp2cmZePeePHuWn0kV9Dna/fyVZDpV2bX5qZ74mILahlVOtl5p8i4rlZtVg0TNM4zz9IXYvPaANlz6K28+wVA/tI+7oIeBswT45i3ZtJo/WNNTJaR2oOqtjU2VRV2s2oc2vurC1vng8sGhGrU+lcR1Nb4kBLO9Jj9VJWep2mFgzMDXwI+DtTtgB4NjXq9I72mkeAl0fEipl5CVOK/KhPX4c0I2Ku1ql/gNoeZJmcUvl0EpVmNFc7z28EZmups84oDkN/R6AvOPgANaP+vMy8L6pwxEZUhsIlbYDn+cBrW0f2iml975nZ1AM5fZ2tz1FrkTZs9xekOlkvau+bn7p2nJmZv6MyFzRE8dgaAAtS67se7nv8POoc/nBE3JSZV0VVzf8SFTT8jEotn2n1rg39nVNqrflngQ0y8+L22LrAJZl5agsklqRmdffNzO+OaaMnqCeYdPgAtZXQMu01k6iB9j0y84KIuAdYLyJ+1fp9Z49tqyeOnLLEb87MvI8aPFiOWkrSSx+fjcqogSpadQs1gIPB7vC1Y5xTBbvLUNuW7ZWtSjs10D5Hb/lISzffDLgmM48a9XY6wzu+tfTPnak/0Aepkav5qG1wvp6ZF7YO2K5UwYNbqNneewfU5Amlrd14B1Ut9efU6PZu1LYLN7bX/JbaCmDt9pqD0r3YpktEHEBtX3MT8Enq3N2Hmtn6cZvh3Yoa3XsGVVDi8EG1t2takPUe4NbM/G5ELET9Ll6UbV/RiDiIquh+GbVe/VOZee5gWjxxtKUlb6SKrZ0cEa8ETsnMufte8xuq4zUXtb5/z8y8eiAN7pB2Hh9KpdteC+yTfWtHWyC8G3Ve30UFwHtn5nce/91mXq1/MRn4cWZeHxG/Bi7MzF3b86tQn40HUSm13wCOboGFplPL9ng7cHMbPHg+tSPBetm2HIuI/aiCdpdT/ZAD2+CMnkTrw+1NFVY7l0pl3on6jHt7e81a1CDDqlQG5Ccy89rBtLi7ouoKLU9dQy6JiL2oJTsva3HKZOA04KdUevkt1LV7TCaODHjHkYiYlH0FpdoJ8l3gm5l5RkS8F9g1M58XEV+hUgJ+kJm3tdfPkxY8eZyp0zr7Hn8Xtc3NN4GlqM7+xtQM+UXU+q5723qQ1YDZMvPYsW7/RDGN4/tJ6ph+kKokfge1L+ay1LqZt2Ur998+kK7tncsaur605d75/mLqeJ9C/R7+SqWUbwusn5mv6L2PWoc3P7C/ndkpnuTa8QZqxvB7VLrhbzNzj4g4mRqt3rm9bhHg3cB/M/MrY/8TTHzTSFmcm7qenJ217OQ2aq3el6ZOD4+qvLoytURlpu3sTOP8fTq1POdp1IDMwtS6uquBS4FnZytM1871lwInZOaFY9z0CWca1+GVqYyxc6jB39OpPscbgVdm5qbtffNRgdrc1HZvdwzkBxjHptFHXoFKT96bqgGyN7WM5FpqouinmfnD9toFgBUy87dj3vAOmmo5xCzUpNu7qGD21VTG0znUXt1fzczjogqXrgq8l/rMHPVZ3ce0eSb+DBi4FtDOBuxLzarc09YZPYva23V+qoLka4F728XzHOrD/a/UmrC9nY15chHxtKlnvNsf3peoD/GzWmrnEVQhsNOpfXR3ycw/jnmDJ5B2vj679yHSPrTvzVoz91Vq9uvQNtO4F5WadQ6V6vKnzNxnQE3vjIhYJKuy9dSP7wgskJl7tvSiTYAFW2B2PbBzZp7YXvuYtTcqEbFgTlWRun24f5XqTJ3SlpJsAlxFbVt2BfDCdO35sETEc4EbMvP+dr+3Fnc+qjP7d+B1wH+pona3T/X+J1znO7OIquZ75zQefzG1hd767f5m1NKG7ahr85KZucmYNnaCm9a1oj3+Eeq6+/GIWJ5KCf8PtQ3csVThnmPaa70OT0PLnrkkM//Trr9Pz9oS66VUyux67XVvp7aQ/AKV8fheYKPM/O+g2t41MWWJWv9j81M7mbwzM2+NiK2ppVMnUvHMxzJzjTFv7FTclmiAsjxAVY3cIyJeT22w/DHgBKpS6p3A+/ougj8DZmkjrV8y2H1ybY3Ase32OyPimKjCPVCj229stx+kjvlLMrO3xdBzx7q9E0lbd/Q+YNOIWCEijqYqSh7SLoC3AQ9ExEJttPpm4E1ZWyl8Czh/MC3vjoh4LZWRQEQsFRH7RMQb22DabcCLATLzr9T66MXaW/elOre05+1k9YnaNuv91KAYEbFOO7Yvb0HUnUBvL9c/UVvCPS8z/07NqG83re+r6RMRL6BmBp4TEcu3VNv9I+J1VC2ANaliPwdn5laZeXtErNT/PQx241nAd1pQQETsFhE7RaWD3wrMFxErtpdfRn0eLkPtv/2y9n49hSgbU0t1iIhFImLXiNigveQ/wOSImD0zr6CO/QptkPL71G4PgNfhaYmIdagsmbUjYnMq++7IiHg1MAdwWd/f/jFUHZt5qImLo6nqwBqmiFggIj5D7WBCRGwWER+M2tXkf9Rn4trt5adS6/0XAn4M/LdligyURasGIB6/wPvd1MzAIlSKy/VtduxwqpLqbyPiJmod2OZUiiiZ+esxb/wE0Te6vxvwl6j1MQtTs4ubUOuR9qSO7WGZ+eeIWJYpRai27c0s6LH6zt+HIuJU6pzcnVpDsy21hcXbgPuAF1Al/w+lOlTnUm/+xQCa3kV/Af4WEUdQWwxdSK1VWpkKxK6I2sf4B9Ta3fkAMvMw4LDBNHn8yyqCdBGwbkQcTi15+APwiRZ8nQ+8IiLWyKou/gB1fpOZbx1Uuyeydl15RmbenplXtuO8IxXgHksN4BxApZD/BpiXVpwxIo4EFo6ILafO5pnZ9M0S3k3to7tTy2i6iyoQ+Hzqc/C7VKXgSzLz6oh4BjB7W8azxMx+HKdXy7y7C7gvIvYHXk4VpHt7RDy7vewGqlrtT4ELqIJUs2bm15nJC6hNSxuwnaUtZfgttaTs1dR1eAtqL9dtqf1aZwfeFBH/ojIm/wjc1TI+jhz71nfW/6jr7Srters0tXvJJtRx/gOwdFTB0X9GxP+o63lGxBsz866Btbwx4B1j0bceKSIWpf4wr4uIb1AjJ3cCZOZ2EXED9Tt6P7Xx+6rAB7IqfGoaYkr1yUei1nvcE7Wp+z5UxdRLImIeagTqedR6j0Mi4g7qYvqJ9q0eGEDzx7XWIX3MzEnr7K9IpcP9sHWWdqWCru9RFa7fGRFbUR2wd499y7tjGoNlN1IDDAdRyyKOaSm2r6aKR5wLfDUilqOKgx3WOhORM/kM2NTi8dVUr6IK9uwJvKJdp19DHduFqfWO34iIU6gBtF6hH9MSZ8xqwAsi4iyqyuqR1EDZ9W2AprfWf38qs2QXYN+oddJnU3vNz7Trz6cKEmgpn6dSAwSzZG3JsgDVQX0pNYiwVVQ9kBWomccb23sNdp/ENK7DF1Jbkr0f+HJm/iBqP+PVqIGGW4C9otacbk2d1494rXi8vuvwwzFlGcMvqcmL2bOKLV7T/u4Xowqpbd7+fSaV+egODyMgHrvTw31RBVyXpXaNWbW95sNUNuRNVJHAIyPiRmq9+n7tvQMPdsE1vGMiav/RuXrr7FpKUW+j5auotY3/pNKKds7M09rrvg4cZdry0EXEu4FbslU5bH+Ae2WrABy1rmaenLK+8aXAcdlXEEElploHFhEvogYGfk3NFFxPdUKvAo5oQe+xwB8zc++oNXeT06qIwxJ9BTui9ma8D7g6M++KiBOAezLzHVHbO21Lja7uEREvo2baL06LzkzTVMd2EyqY/StVQOYM4PuZeUCbBfsYddyPjEopX46qcvv3ATW/E1owdjKVBndjZr42IralZsa2zczbopZKnAPsmJm/jCoo+HDO5FXz+wOniFiYGiA/PzP/ERHvo/a6XCNrDeQrqYHHXagZ31WprUK+P6DmTyhTTVqsQi2HupLKOPgGcFNmfrgFxV8Abs/ML0bEetQSk/OythpSn5by/UDf/Y9S2QjfpzIgt6S2yToiM89vA+0nUNWY74taBnG1A7kjIx67/dvrqCKBd7aBnP2oa/CvI+KF1HZmn6IyGTajdtw4LMfZHvOu4R0b+wK7RsRcrcN0KHXyvJb6A96Dmsn9LPCliNi6BWTrMGU/XU1DRLwkIvbsu79+RJxNFS54Z0R8sT21HbBPO/5Qo7HXQ61vzMwfGOw+XkSsCRwUEUu1+9tQ1T1/QqVwfgEIam35StS6Oqj9n/8CkJl3GuwOXZSnRZX2p6WQPzMivk9dU9aj1sfQ7k+OiFe3VPwHqX1gycxzMvMbBrtTtGO7eER8Gh49titFxGnUMpJtqMqS/6Eqf746Ip6Vmf+i0sLnbO/7ZWYearA7Ih6ilkXcQFu2Qy3rmQPYuM323EHN/L4fIDNvmpmD3ai6FGu2tMGIiN2BX1AzLT9uQcBRVAr4R9rb/kTtL/9IZt6QmScY7D65iJgjIrZrA2MPR8SCEfFt6vzcjNpm799UbYq5ImKdFizcQK2LJjN/kZn7G+w+VkQ8PWpt6Lbt/jIRcQawKBXQ7kBlJ51MyxKLiLmAxan05d61+EqD3eGJiBdGxNugMvkiYoPWn34H8IWoYlS/oH4vG7fXXUYV2H1GZt6TmUdl5uMq5o8HBryjJCKWjojPtBHoL1HBwItbh2kH4Oz2R30jNaL9pqzy6bdT6VoBbJiZNwzkBxjnImKxqKJJ/wC2j6o6Ca0iHDV6PQ+wWUS8LjNPooodnBuV4rwKlYakaYiIjaO2U7iBKrqxaXvqMmAtKvX+3dQx/ng7vrdS68VOp9K4fjzW7e6Y2Vtq4WsjYpf22CrAWZm5FrUNwzoR8cHMPJ/qyH4najuoDwFnDaTV41xEzN9mwx4Gto4qfgKwOlV9+Q3UzNd7I+KlmXkcNZt+ckTsTc2eXTD2Le+GqPWk/fd7SyXupqqqXgFsFLWO9BFqjeMW1CAlrTO1+di2enyJKWtDl6EGHaEyxp5GDZT/lMo8OKTNmh0DbBdVy+IE6jp+b0TEWLZ7IoqIp1HXg/VpQRlVsO4PLa3zf9T5+v7MPJn6bPxam6HciZqdxGP9WBExOSK2zaqgfCOwfDuv76L6b5+iBtCfQR33eahzdw2qb7EbVeH6jrFvfbdExOR28/nA+9pg8KxUX+/D7et5VK2W+YGTqBoWR0Wt54UarBzXDHhHz53UCbJhW3NwJjUyNV8bkX4n8J3M3IDan3S79sf+PqqE9/5ZlVU1ldZB+g5Vvfpmak/GLwBk5reo2a2zqTWkXwN2jNp2aFtqduYXmbl6Zl46iPaPd+0DfhVqz+e/U+fuiyNi5ZZevw71gfQWal/X17S0lhOo7IW3Z+Y2/elJGpqoonU/aXd3pwqgPCMzTwVOioifUWvO30BlLsxBFaG6mLqur5PuGf1EfhURn2rX4QOAT7bHv0UVrTsPuJxK2+99mB8M/Ls9v0obYNAQ9AW2vXTQl7b7vbS5Se25U6nrT69K8C+oz9Olx7rN41FEvIQqFgOVFUZEbN2WTO1DdU4PpLYzXD6qkNcZVJGqRYBPZuaHMvO+Xhq0pq1lj/Vmb78BrB9Ve+VE4NiofbdXoDIOdo5avvNDaknE04H1MvMEsALzNDwbeEvUkpsTqdnbLTPzn1SK+Lep6/A61ETQhzPzHGoniM9m5isy88wBtLtT2jn764h4RWYeTw3mbteuxftRM+m/oFLLz6OO/cXUjPts1B7n606ITJvM9GuEvoBZp7r/ZqoTtSJ18TudmsmFCsa+0G4fSf1xrzDon2E8f1Ed+Vnb7c2oUabF2v1Lgc3b7XdRH1JQaxf/B7y33Z806J9jvH71n7/UYM33gTdRKYWf7jtfP0WtNYcKes8B9h90+7vwRRWXgVo7eju1TRbUHtGHttur9c7vdv8e4Jvt9oKD/hnG4xeVMdO7dqxNZYbM3u6fThUDhCoceEC7vRKVmv/udn+eQf8cXfiiiqn9jAoK9qUGEB4999vtz1EDODcB2wNPG3S7B/3VzuFe3ZXTqOI8UAV7LgRma/ePBFZtt4+n9kX32jBjx3ypdmxXb8f/QGDv9tzLqBl0gMnULOWR7f5ig277ePxqfbjeOfw0qrjld9v9DalBhTWpdOZT+973QypDb8ne+/0a9u8i+m7vCJzSbq9OZYis2e7vBWzVbn+UmlB6MZWZOsegf46hfDnDO0IiIvLxI9fHUemgm2SlbXwLeFsbITwEWCsirqIKVr0/My8fTOvHt7Y2aZbMfCSnVIw7gUp96VX9/Rzw8YiYDfg7sFhLA92Lmp05ub3PdbpT6Z956Us3vIaaadma+pD6BbBIVAXgi4A3R8RRVGXa3TNz17FveXf0jnv2VRenCtv1tqzYh9qH8EXU4NmcUfvgHUBVaP5le/+/x7zx41xUkZls53dk5m+B31PZH1Cd2G3aurD5gadF7ff4LqYUYyMr5VZDMI305W2AH1Dn8+rUtWWTiFigd+63l+5PVRHeLjMPzpm4anDf9bl/hvD9VMr9s7NmZa4DPtkymeYBVo6InYFrgQPaNcVrw1OY+nzNzOup8/Uz7fgfA6zYrsOTgWdFxGrU+ujDqWwosjLP1KevD5ftfLyX2rN81rZu9BfUEqpNsmYL542IQyLiUuoavGFm/m2qvwMNUetPzzrVcTwceHrLFDmf2gpqm/bc86n6IBtTAw5foHaX+WdOsK07rdI8DG2N44NZi7aJqn74OWpW4GpqncGVVNGTIzLzjKjqtednVfxcivocc53uNEQrSd93fzngPVSay4+pUcAjqNnGi9ra0Z9Q6/A2B95OHfeTxrrtE0FELJSVPtS7vw01Y/tHaqT179S5e21WlckdqDVjH6Fmzl8FfK//e2h4IuIdVGrXTzPzgYi4lqouflREfApYPjPfEhFvp/4W/gB8JC3W8aSitiLbCrg5M0+NqpT/F6py7ZUR8T3qunIgNYj2buDbmXnwwBo9gbWBhey7v0BWheC1qTWNL8nMS6O2eXodcG6agv+k2rFaDLggM69og10rZeZrWprzN4HXUFuEbE1tH7JNujRqyCJiC+rz7/fArFRGwpGZ+d2I+ATwzMzcPqq46Buoft526TKex+j93ffdX5oayP078NfM3K8NLr4DeBu17vz91CDDBdR2h/dn5o/Huu1d15ZQrgFclZl/iojXU5l8vRn2A6nf1b+p68nrgE9k5omDafEIGPQU80T8ov4of0iN5n0KWKA9fjAVMMxCpdz+iVozuiOVCz8PFSR8B3j6oH+O8fpFrQv4DBVYLd4eW5card6Tqjp5NLXH68eBr7XXvIQKFhYd9M8wnr+oTdt/QqUTLtceez81wro8NSt+KhXcvpqaHV+SSnP+LrDRoH+Gif5F7du6c9/xX4oaVT2mHftvUB8661LbawHMRRX0eVvv/qB/jvH4RdVBeGfftWNNaobgEKoT9WmqKv5uwDntNStQe2Wu0O679GHGjv3SU91/BxU0nEANOMxOzd4e1Z6fg0pZPhR4zqDbPx6+2nX3s9RWebO2rwOogcgvU+voXtNe+3dg/Xb7EODkdnu2Qf8cE+GrXV8/ADyr79ifQaV0nkYNIixCpdte1K4bS7fPyi3be1zq8PjjOhs1+XMatZZ8HmqP3NOpNeYvoCaFNm99iy9TtWugio5+BZhz0D9HV77aNXYdYN52f2uqP/1lalZ90/Y7+hbwufaad1ExTmeWk5jSPERthOo71CjrOsAXs0au56cunudnpW2cQFVJfQ8VJKxApWT8OjPfnpXirKlExJbUB8tkqqP0zPbUOtQf4meoIPdKqnDSQcBzImLzzLyI2n7oTisiPl5EzNJmBQ6mBg2+RqXcQ6Vynp6ZV2Tmp4B/UdvenEkd6z0z82pqhO/UsW57V0TEcyLi59SH/t+Zcn6vRo14b0llJvyVWnf+K+CSiDgoq8z/rkxJsR13Zf8HKSLWiYjzqGqqt1EDBlAdrm9n5oeoNK1ZgXdm5j5USuJbspaT7A7c0WYnXfowRFFbmH2w7/5q1Jrot1A1KzamAuCDgedHxCuzUuIuoM7pmTplPCJmbdfn46h1cnNRe7suQs3krpyZO1Cd0o2ittjbjcpoghqo7M2Se/4+iYhYMiJ+Qk1YJLBEe2o1KgvkddQAzf3AJtS2TldSqc3XUSmg14JLHabWlvRdRE327EDtjXs3VZfiDupafCW1HvSt7bHjqaUNL6AGez+WmfeNfeu7JSL+LyL+QO21PRe17hZgA2oZ5Q5U0cbXUBMaXwJeFxHLUr+T77Xv04n+tAHv0K0C3JiZvf1d7wfIKo1+NjU61XM9lY7xT2pU++Sxa+bEExHzUiN+783MD2bm2fnYvUPXb//eBlxCpRXdS422vqh1VI/OzHuzDVHpMeajBhJenZknZuZ1OSUdeX7g/pb6CdXpen/WmukfMGWNqOn3w7M9Nav42sz8YU7Zk/Fuag3Ngllbl11OFU2CmgneIiLmysxT0v10HyeqSvX2VCGfzTPz1MzsbR10NxXYzpKZf6QGc1Zuz32BttVIZn47M2/22jH9ImK2VjeBzPwd8LGI2Kg9vShVGOyvWWlwP6XSbe+iCuJ9pb3vvMz8SlaV4ZnZ66mtl9bIzL0y88ysdND7qGvzOu11p1Ezkc/JzKOp/uh6mXlrZn4HrAg8HT4KXJaZr8rMr2Xm79vjswL3tFTcO6ismze0fsYhwIYRMU9mHt8G2PV4awEHZ+b2mXl1Zv6tPb4Q8ADwjHYt/gmVLflSatDrCODuzPyXg7nDFxHPoTKdtsvMd2TmzzLzrxExN/WZuBBAu2YsTG2beilwLrB1Zt6dmUd0qT9twDsdphrdWJDa+qO3CP/hXlEJKt12vYjYKqrU+puoSqu0Dy//iJ/cs6i0iqvaaPcs8Ojx/z4VEGyQta53LmpklszcLzP37Mof5Sh6LjWC/W+YUrygPXcqNYu+Ybu/ENVBJTP/mLVHtGZQO9aLUR3Vo9tj/QVS7qHWlL623T8DmD8iJrfZx2d7/XhSK1Od1eMjYlLfNRmq0u891HISqKUmC7YBsiMy85Vj3NYu2YJaZ0fUfsbPBH7UMqH+BlzaZnoBzqeyRiZRM2SHtPd1YvZgRrVrQ1BLTU7NzAfbAE7PJGrGbKV2zvYGHXt7Z66Ymb8YwyZPWO1QL0Ut3TmoPTap7yV3UbPrK7b7x1IFAhfMzPOAtZzRfUqbUnucE1VEDaiBLerY/h+VlTcHldnx56wtsr6dmTcNosEd9Trgysz8XUTM3ned/R/VB5zc/haglkv0ss12zsw9x7apY8OA9wlExDMjYmt43GjpHNS6RmgBFzBL++O9myp2sjI1o/uVtBDHUEymZm3vysyHsxXiacf/z9SHz8ER8SVqje9vYEoVS00REQu0f/s7k/8FfkebOWzHtXeMz6ZmcV8TEb+hUvFPGMMmd07/sW/H+g6q4mGvE/BI3/O/pQKxHSNiD6qwz++ZkmL7aPE2lanO7f8BL8xaTvJQVsXf3vO/prYMOSAidqO2u/lFZubMHmzNiL4ADapo2tER8XvgXVn7dn+DSrW9kepYfaDNKixLXcfJzP9l5hHt9kw9UJkNNci4WHv4gb7nb6OWR61EHetvUxk5F7fnXR41ndpx/geVXtsbMHi4dz5n5k/b8ztGxEep6/AF1D7QpGm2j9E/aNvXD/s1VV+FbEW8+p47nPr8O4hai36FWWMjq+/afCe1hy6Z+UD7vJulZe39iBp8730mvps61zt9jhsoTENEfBz4Oe2PdqqO6yHAchGxVe+DOmu91/zATsBZmfmxzFwrM48Z88ZPABGxVETM2W4/esFsQdesEfGB9tzsfRfKN1CzvJtSH/TrZ+Z32/usUNtExIIR8TXgwIiYb6rO5J1UR+olvRmE3vNRFUCPo9aW7pqZL8vaXFxD0GKBOSLiYGpG/dHHW8f0RKoYBO0DaLb2/LLUKOsHqYGzz2XmxzPzwZk9IOgXEa+IiB3hcYHSX4HfRVUapx3X3nV7aapI20eoQcqtM/Nb0/geegoxZYun3nGbndrC7F+Z+bb22K7UoPByVMf2bmpZxL5UquNMXdU9aulO7/Ysff2LY6ktb57Vrg1z9q4n1ODYrlRNhT9k5jrOhj25iJgcEcv03e8d56dTx3EDePQa0LsOP5Pq++1PZfN9NTN3a0GCmqi1ob+g1uUDj+mH3U4tIVmlvXa2NgC5AvBQmz3cDXhtZu4x1m3vmv7rCTzmM+2vVD2btdrrZm//BrXG/xCq+vg8VH2h341ZowfEgLdPRLwkahuQJYDXZ+aXe0+152dr93cCPhwRH4mI+aMKLf2clsahaWvH92fAt4FjW5rQw+1Dv3cufgz4dAvWHmgXypdQge5yWUWVjvbD/vEi4s3UKN2/gD2Y6nzMzBupUdVVmbJ/MVFbK3wEmLulFp0/Zo3uoKxCPL2N2XuP9T6Efk0V7FmvPf5gRDydKqY0d1b6+IHpVlqPERELRe37/EVgUjtm/R6grsFviIjF20DBI1HrmP4PmCUzz8jMfT2/Z1y7Xs8TEbtG7ct4GbUU4jkRsWYb2Omtd9w/M/+TVRjlg5n5ksw8a4DNH6iofbMvA/aNKk5Fy0joXRuuodLAd2nP3deeeyfw/My8PTOPzMyvDKD5E0qbtDgX+GrvWNP6u1k1Eq6krsPrtsceaAHB9nU3z22Brkt5+kTEAhHxY6r43BeoQcZe/7g3oPBTannJ2yNimfYZtwJVEGkVgMy8ZGYf+BquiFghIk4EvhMRb21ZNP2TSH+lCmNuAY/O8j5CLe15HXBdu558IjP/MoAfYcy5Dy+PVl7+JzWj+0dqW5sHoqpOvg04OqcUNei9Z11gS6pTuwiwW1ZaoqYhIralgtnPUVUmjwMezswtWicp+/79GrWe92/UWt2VqZmBbw2q/eNZRMydmfdExKeByzPzuGm8Zrb2wTMXVVTiq9Qo9+pUWfqds6pPagZExJuorYWOp1I5fwlslpl3TvW6OamqtR+j/g7uowYffkvtp+s63WmIiL2AhTLzA0/ymnmBTwAvp7JBFgbeSO0Vvc+YNLRjWgrcI333/4+aaTyOKjZzfmZ+vs26vy4zX9P32t9T5/TZzOTawMs3qeqzv4taNnJSTil+2QsYXkBtTXYmlS6+FRWo7ZKZl4x5wyegiNiKyqLpbbVyBbBsZt7VMhQejohFqAKZ21KDaLNR2xNdSB1r1+k2vX5Zu70CVQTpg+3+1NeHXh9uBWp7uF7/YkXgwMz8xtj/BN0TEYcCr6S22JufWv//q6n7yFH1E3ak+tFHUPUWXgHsl5nfG7sWjw+Tnvol3RVV1v/T1P6tP8jMg6PWxxwTETdSgcEhUwe7AFnbhfwqIhZypGq6PEJVU/5Fm3nZAfhyX7AW1Ex6UqOsz6GO/zOAbdM1jI/Rjte8VIrs+dSWKmsA10XEC6mUwqAKEXw627qMFlCdEVXxc2Hguw7UzLg2gv1Xag/Xl1Ops/tR68MWoW2R1eswtN/DtyLiduDZ1Lq89+aUisLqE1VQZhZqxuC37bGVqfXoc/YHAZl5F1Ul+M3UetH5gQ0y8+axbncXtPP2kXZ7PWrGYBI1iPAgFYwtFBGXZeZBEfGWiNiPqja8A/DybGv4ZkYRMR9wT0uHXRK4lNpdAGpLuEMj4jfZqq63a8QVbVBhJerz7/hsa531xKIqJ/eC1LmBSzPzvnat+Bl1rb20/S7Iqgj+1Yi4h/qMXBnYKTN/M4Dmj3dzUAOzUMW+XhARC1EF6BaN2pLzd1mV8Xufc5dT66AXp87lre3DjainAzdl5nFtEmNhWk2hli2ZzQVRy3y2owqSPkAVXpsp1/3PtDO8bQTqKOAUam3RLC3wmp0KIK7KzK0G2caJLCJeDsyamWe2+3NR67kuzMwjImJnqmLwF7JKoffe92hwoCcXlWL/Z2r7q52Bp1HbLaxDBcL3U+nL52XtQaoR0gYc5qZSyD+XtcUCEbEpNfO1G5X2dUxOKdwxK/CI5/eTi4jlqFHp7fsCrk9TM+irUjMGs1F7m+9FDdrc05u9GUSbuypqTeMHqMGcnanCaq+i0hn3pGZwXgS8l1rzuClwfe/vYWYVEUtS6d4HZuaeEbE6tefrN6lBsQ9S+22fkZkfn3qmTNMnIhakrgHPpPpzvwFeSF17l6auEd+hZnN714qHPN5PLWpXgaOoga5t+67FR1J9t/9RBb0mU5kJb+sfgLQvN3LaJMZfehlgLU65mVp7e2FEHALckpmfn+p9j34m+vk4Ewa8ETFHZt4fEZsB62Xm+9vjvSp9GRHvA96amev0ve+1wH/SPTCfUrtQXkUVK9kAuCYz/xcRm1DpnM+iUiwuo9Iyvgb8ODOv8YPoybVU+qsy8+9t9HRf6lgvQs3yPkyN/v2vBQFzA9cCL8rM2wfV7i5pM4gLZObhUQXWXkYV+rqlPb8wcDqVkn8fcFRmPm4PbjsEj9euwztQ6732Ac7NzJ+2WYQVqbXRF1FLUFYE3gx8PGeSNUijaVodooh4O9XpXTEzL2uP7QE8PTM/1gZ4vkxlSh3ttbu0FOafU9vcbJKZN7ZrxYup8/YSap3zCdSMy78G1tgJqg34fpfazu00YG0qdfk97fkjgSMy87yIeD3wceAVU880eh2etpahcCk1cH4oVSztN61P8Qxqu7cFMvOfEXEctZzq0wNrcEe1yaPfUJ+JB/Yyltqk0XbtuVdSRUn/TA3q/HRAzR3XZpqiVRExV0TsCvTWGK1FBQK9IPjRC15LIZotqhLdYhFxPDVj89BYt3uiiIinRcT+EbFx+4P8BjXz+B6qA0tWIZ5rqKJKr8zMd1NpcS+g0pvnssP0xKLWyZ1OHavZckrhrvmorRTelrVJ+O2ZeU97bg3qgui5O3JmA14fEc/NzMOo479RTNnPcUkqlfF1VOXVT0XElyPiWf3fxE7WY/V1PG+k1t39lqo2/jzg7sw8KzMPptLn/kytk56ftq+0hqdvJmCLiNiypS1+j9rKbNO+l15Ane+7UTPxBwI/nNmv3b1B82ZWauu8c6glDlADux8C3pOZ27YBhDPbW90ea+gWB5bJqmZ/FrVk6uUR8d72/F20VNw24PgglSXyGF6HH3fu9ga/7qTWfR5PTV4cFFVB/J6srYSyBbuTqNnei8e63V0VEbNFxMcjYjJV9foUKqPs++26TGZ+ifq9LJSZy1Lrc0+llkq8Mx67v7ToeMDb/0fcUgGeCbyspdf+iZodoM34RnvLbFEVQHeiRg9/SqUdvTrdpmWaogpSnUedT79p6RZ3UDM03wfWjIhPtJf/gPojXbcFuBdQW+G8MS3Y8zgR8eyI+GhL8/whcBKVTvS+qKJqh1LrMv4GrBwRy0VVDn9DRBwLfJaaefnPoH6GiS4ilomI46Kq0pKZ36fSid7SXvJVKmVu6XYduZVaS/30rH243wIclrVHqZ5AX8fzDOA2qoDM/tSa/nfBo4WpZo2IzakZtEuBew0Yhm4andwFI+JHVHryJsDXqWvNLsCWUTUvoH4/+1PrpHfNzC9nh/dufDJRWwdtEVWLImPKbgPPporD7Ehdl9cDVsvaI/rKiHh6VHHGeagtnWb6oOupRMSy0bZYAcgqsvhgRGzfHnoaNRjzntbZfzrw3oh4R0ScQFWsdT3/tPW24JwVHq3GPhtT1kN/gxpQ+GZEvK695xVROzxcQPXpTh37ZndPRLyTqjC+JPAfajBhWWonjYuBXVuWGdRE3MoAmfmPzDyaWipxXNZ2qerT6YCXKX/Ec7T7h1In0euo7UH+0U4uqPWmj1Cptv+XtXXF5lThjcPGtNUTRESsGxG/pjpEt2bmLm307wFqXceqWQW/fkXNcn2eWn93IbWvbm+k6p6srVzURG3VtB+1Qfh8wKLUhe8o4B7gOmq97juoNJbTqDTPzTLzDqr8//lZ+0GfMvY/wcQXEfO2jtNkYH3ge1FbkS0EfJ4ayHl5Zp5Gdabe0jquy1BbaP0XIDP/kplXDejHGJfasf1K9O3D3Wc+4OrMvI2qp7ABdf14CzWr83GqUvAemfmRzLzfgGH6tQHdac1svQCYIzPXy8y3Up2u11PX7F8Be7f3PZC1Ndz7XOLDJ6mByC+0Aa7eLPcdVO2Eh6isptOorJCI2hXix9Qexu/z3J1uvwJOjlqO1rMbtUXkt6gU8aOooOD51JrdC6h+3BmZuVXWllnq0yYsfgSPyfKIlvp9C7BxRLyAKlI1ido2cktqgGFJ4B2ZuV3OxAXqRkJEvCoifgkcDHynZYE81GbTL6ZikR2o7JFDIuKFre9xeUR8p/d9MvM3OZMWpXoqnQ142x/xiTBlBjdrndd51Jq7BagR7H0j4hXAIxGxNlXR75lRa0lP7EsNVRMRC0cV/dqWWlfwMuCGvsEDgCOpC+Xp1D6CO1CDCT+n0jwPy9oXVtP2VipwWitrn7SzWorRKVQHajFqr92XAVu04OBC4EURsQRVmfmAJ/jeegpR6eOXUUV5LqUGdf5EzcgcQ6XS/hHYMCKeBhxAZS2sTXV2j2zfx5nHPlFLH/ajChytQ2V3TJ2NcwN1Hl9IZYjsTW0B90Gq0uQPM/OlmfmLMW7+hNc6rgdFxPPb/e2j9nCcjUoBzaj1p1CpzCtSdQG+Drw0qojVTC0i5um7eyI1eL4M8Mmo6vdQg7mfjIjfUksgLgP+1ILbm4GtMvPddkyfXESsFRHLtruHAmcB27VZ22e0VOZ1gaOBNds1YRngocy8MTOPAt6QmYcO5AcYp6bKHPtxe2zT9m//IOQJwMZUobXPZ2079llgM+D3mfnhdLusYYmI+dr1eG/qHN8LmLt33reMyT8CL45aK/0qqh+9W0TsTu2z++NBtH2i6WzAS/2hztr7I6Y+dKAujPNSgcQp1Mn1PiqQOBTYPzP3mtnXI01LRMwaEZ+jRv4Xpkb2TqY6+KcDb4qIBdrLH2pfv8jMlTPz65m5M5Vee2tm/mEAP8KE0D5wXkcdq/vaBa836voAtWZueyqNeUNqb2Ootbq7tA96z98Z0LIWLqY6+utn5rltVuBsaqbrUqra+I7Ac6mqwRtk5pVUMaUXAJdl5tfB9WH92iDkucDcmXk9dd39QEQs3DtOfZ2t3h6Bq2bmkZl5HnXOH5y1fldD0Deg8D8qG2GbiDiVGtB5N1V1+cXU7+dVAJl5LjXbPl87v9fKzH+MddvHgzYzO2vLMti1d02mZrl+R830XkmtOV8C6GU2HZaZG1DpiO+LiNnbDLlFqp5CRLyYymJasD00L3Vd+CxVifnLAO3z7teZ+d82efEAtW0Z7fmZujJtvyfIHLuHWqv7MXjc8Xoa1bd7ZWYe3/ogJ2XmFp7DwxcRe1K1KObOzDUy80dU7LI88JKo+kIPUFsOfY4aZHhJZm5N1cn5R2belZknDOpnmEg6U6U5IvalZm9Pyymlu98GfDAz12r3J2WVpH8Dlar1tWz7X0bE8pl5xWBaP/5FLZ7/BpXi8vmsqpNBnUOPRBXk2R24LTP3iqrk90dg3fbaudI1utMtIr5HFec5pH3I5FTPH0hdJN83mBZ2S5u1uZeayZozM9/WHl+Zqvx5fFTF2jdSs41Poz6A3ket2X0hcK+dq8eLiPWpFOTnAqdnFavrPXc0VeDrg/HY9WObAy/JzN17QcJAGj/BtWv0LP3nZdR60vdS5+s7o6rqb03N5N5ErZf+A7U27O/Ah8x0KhGxFbAm8PPMPDWqIvtZwAtb3+JW6nPvmMz8VnuPVYCnU0QsArwsM09s908DTsrMQ6N2z9giM1/bMswupaqDn5CZl0fEV6nts/bIzB8P5icY39pn2KZUgcv7+h6fjSpOdXZmHtB/zY2Iv1F7xZtRM0La+Xs4bZAM+Ftm3h1VjPTBqIruywNHZubFUTtyfB94Vft8dDeTGdCJGd6oYhqvpwpN7d/31DHAP6MW1kPlvtMuhgGsF7WPGwa7T2leKsDatgWw87YP8d4H+a1UetdqEfHi1kH6AxUg9IqGaTq0TupZwHIRMTkzMyLmbM/NHxGrUIWSVm+dVQ1DRLyUWjfTq0p7Y0Rs1gbRvkmrBUBVVL0N2Kmll3+EKu6zb2bebbD7eC0F9pPUbMwWwJ0RsVHfS3YFNoiIl2bmw+3DfH6q47pi6wAY7M6AXqDVjumCEfGaqHoWv6S2xVkqIhbIqqp/PbXu8URq+cmN1PYW75yZg92IeF1EnNcCBahMsFuAtSNi0aylJL8Cfh0Rf6Jmww4F9oiId4BZHkO0L3BYRGzR7h9O7QMNlbb576jCasdT15QHqHW981Dbv61osDttT5E59iC1LOcdvVnFiNggIvYGvgX8rS9LRMO3OLXl3nsz83Jqlp2csmXWd6lB9Ze2yaO5qd1NXtheZ7A7AzoR8FIny03AV4BFImK/iFi8nTxfZMof8f3tj/gz1JqE72amW1pMn3uozurH20XwcxFxBrWOYPHW2b+UGt3+aHvPDpn5lQG1d8JqHaQzqb/Pt7bHeqOxbwOen5nXUiPhVp0cvvupgl9bZOavqXS4/agA+CVZ25SRteb8eGDTiHhBVrGkX6Trwx4nIvaNiM2zKke+PGvpwzVUILV++xAnM2+lOlS7tPcdBFwO/CYzN86p9szUU4uIN0XEyr1AK2r7oF9Ryx++S23N8kNqXelb29t+Ra19nCMzr8jMQ7Iqfs7sbqPSvj8RETtQHdUfUfUo1muvuZ4aQH9PZr41a/u991EDvnoKEbFy1FpSqNoHtwPvjIgXUcV6LoxaGx1U7Yp/UAV8dsrMfagZskeyCo3qCbQ+2kNUoSmobZoeHZDJzLOpSszfiYhvUAM312Tmnpl5lQM3I2pFYM6IWD0iPkz1o7/d/hZmz8y7qR05XkYtNbkW+HJm/mmAbZ7wJnzA26b276fWz61KpWPdDewVEUtl5m+o4OG7fX/EN2TmT7KKo2j63E6tXdyEumBeSq0ZXZTWWc3Mf1KdgZPb/ZlyvddIyMyrqdmErSLic1HbDP2Mqm59SXvNTDvzMqOi1jAtHxH7t/uzZm03dgqwRlShiGOorVdO7B9JbemLf6DWO7nN0xPoy7j5cEQc0ns8a83XuVTHdfO+x/ei1ivdBTwDWLmX0qjpFxGLtptrUGvMiSqGMi/Vcfo5Fbx9vg2YXQB8NCL2oGZ2f49bPD1GC6K+Rs2u/I3aVu/Z7fZzWgbDv4D/ZOaFETGp9UlOz8xLB9bwCaLNzO4E7NDSas+jsmyuotaSv44aJOvNpj8CnJW1/+ucAJl5cFr86ylNZ+bYYcArgbsyc5nM/OYAm9w5fdfWH1B7RP+EOt7zUmvVdwdWAMjMn1D1cebMqtZ85li3t2u6tIZ3M+qieEjU/nZbU9UTd6LWJp1NravZaYDNnPB6aztaoPBwRLwfWLh1WjXCImINYG1qm6GzMvNrA27ShBW1V+Y9Uduy3E0FVn9q62O+CiwHHJ+Ze0TEB6mBnS9SafuHU9eRrU3Pf3ItbfZk6phtCfwVOKQthXgaldr8UioV/Pr2ntWoWZqLBtPqiS0iXk7Njj2P2rNxHyrF8+Q2m/4x4NXAZ6hlPx+lBoKPoKozH2eHatqiCjHeQK1BX4VaA7kycAV1DH9HZSm8yUHeoYuIJamMmlup/tqOVKbY/cD/UZ9/J2bmZ1t23uzAJ0zrHLqIeB7wIeAvmXlQ3+MfAv6dmd/vfU4Oqo1d0YLbmPo8bQNij0RtebhAZt7e168+F9i7ZUQ92t8eQPM7acLP8PZ5hCpXfxk1S9CbhfwcVY1uWYPd4Wt/lLO0YHdZ4C1U2pdGQWael7W90FsNdmdMVHXVz1NrvXamZhi3pVK3PkalDp1JrRV7RkS8mqqUOCc183U6VczjzQa7T+4JMm7uAT4TEUtnVbz+PZU2/mjxqsy8wGB3WM6l0j93a7O3p1FpoXNQAzXPArbMzJ9T2+Ic2pZJfDJrD80zB9Ps8S8z/0MtlzomM0+lgrJzgTdRwcNsVEV3g90ZkJl/o47pxu1rCeA5WVXCv0v153aLiHmBb2Xm7ga7M8bMsbGT5ZGIeH5ErNLOX2hxV5u1vb3dfiAink0NPv6z73sY7I6gzszwAkQVjTisFxhEFaSaMzP/PtiWdUcblXox9QH1Qmrm5huDbZU0bVEVgo+iUrV+T83O3JuZu0TEH6j9Gldvr30a8B5qJuej1Bq91YCDWrq+ptM0Mm7eTg0q7JSZf46ITajPn58Msp0TVUyjSmdErE7N8q5PVRw/iDrnT6DWnn+W2jbrWcCdwAGZ+dAYNntCi4jrgY9m5rERMQtVWO3hzPztYFvWDVGFqlaj9jpfEXhNZt4bEdtT1+SPt7WNGiYzx0ZfS9Hfj0pZPo7qT2yYj62OPR/wEmpf47WoAR3r3oySzgS8LRA7gNqW6LReyu2g29VFUZWB1wO+32ZzpHEpqgLz7zJzlnZ/Y2rW8W3UGrHDM3OJvtevBmxHzeb8bABN7oSIeCO1t+vD1NYLH6DW+j+HWkN68eBa1x2tmM+cwOUtZfyLwIKZ+a6IeD3wfmArauZsE2r96TvbLLCGIGpLoqMzc/anfLFmSERsSC2D2JzKavqJfbnRE+GWWSNl6vM0Il4AvDEzvxAR/0ctm3pTVmHM/vdtSQ3oHOjs+ujqTMALEBFfAX409QklaeYVEcdSe72+OyLWorbC2SqravvpwEWZ+bH22knA4r21pZpxZtyMnJbutiW1NctfqC32DqBmD35HrYl+G5US9yOqQv45vaJhmfmhiHhaSynXDIqqqPpVar15dzpP40hErEllJLwhMy8YdHukJxK1p/mSvSzHiHgxtT76nlYHZAOqMvbswO6ZeWlETMras7tXB8c9dcdI1wJeRwIlPUYLtK6j1oP10j6PaB82y1Al/xc3EBs5ZtyMjJY6uw/wGuBUatuQC4GFqXP4te11n6c6VgdTs2ObZ+ZrImJV4NmZecIg2i8NRV9BH68XGrfaAOTeVCHApAoxvgF4I7W+/xBqYPIv1ODjN9v71gQWSfeKHoguFa3CC6SkqWXttb0XtT537cz8Wgt2J2XmX6k9M+/v2zJAw9TWhs5CVVr12jzj3krtj7tWZn4yM89qs7TzAP+OiBe21x1FBcVPpyoGzxMRL8vMCw12NVH0Zrq8Xmg8agUwPwecD1yXmYsAe1A1Qq7KzKWpfeS3oGZ19we2jIiXt0HJI6kCuxqATgW8kjQtrdL1rcA6UOX+qfWlZOaRmfkvUxRH3E4uL5lxETErtQ/p0Zl5Xztne+6hCk8tB5CZf6b2hl6i1VVYLzPPGes2S1IXtfXll1HFWk+mlpJALTOZH5ir3T+ZGujdNDM/S2XmvJ3aLeYVmXnS2LVa/SYNugGSNEY+Rn0YubfdGHCWZnhaFsJD1BZ7AA/2PXddRJwDbBIRr6BmfJ9G7Q1LZt451u2VpA67Bdg6My+IiPcAr4qImzLz4ojYA3gv8OW2TvePwHoRsW5mfjkiZsvMB5/0u2vUOcMraaaQmT8EPtLSkkxf1rjWztGzgOUiYnJmZkTMGWUu4Brg88DtVDrdui19X5I0gjLz4r4iamdTa3df3oLZI4HbI2LX9vw51Gzwbe29BrvjQKeKVkmS1BUR8TzgQ1Tlz4P6Hv8Q8J/M/J5bi0jS2IqIt1DV8X+cmWdGxMuBY4GVMvPWwbZO02JKsyRJ41BmXh0RpwCfjoiFqArN7wdmA3ZqrzHYlaQx0DfA+HPg+cCaEXFpZp4dEZ+iFcD0ujz+OMMrSdI4FhFrAGsDqwBn9fY2liSNrV5AGxEbAFtRhQV/Neh26ckZ8EqSNAE4cyBJ40OrpL9CZl4y6LboqRnwSpIkSZI6ySrNkiRJkqROMuCVJEmSJHWSAa8kSZIkqZMMeCVJkiRJnWTAK0mSJEnqJANeSZLGuYh4Q0Qs33f/zIhYdZBtkiRpIjDglSRp/HsDsPxTvWh6RMSkkfg+kiRNBAa8kiQNQET8OCIuiojLI2Kb9tg9fc9vHhHfjoi1gE2A/SPi4ohYtr3kzRFxfkT8OSJe3t4zZ0R8KyIujYg/RsSr2uPvjIiTIuJXwBlj+5NKkjQ4jvJKkjQY787Mf0fEXMAFEXHCtF6UmedGxEnATzPzeICIAJiUmatHxEbAnsBrgO3qLfmiiHg+8IuIeG77VqsAK2bmv0f555Ikadww4JUkaTA+HBFvbLeXAJYb4vtPbP9eBCzVbq8NHAyQmVdFxA1AL+D9pcGuJGlmY8ArSdIYi4h1qBnZNTPz3og4E5gTyL6XzfkU3+b+9u/DTN/n+X+H1kpJkiY+1/BKkjT25gP+04Ld5wNrtMdvjYgXRMQswBv7Xn83MM90fN+zgbcCtFTmJYGrR67ZkiRNLAa8kiSNvdOASRFxJbAPcF57fDfgp8C5wC19r/8hsGsrRLUsT+xQYJaIuBQ4BnhnZt7/JK+XJKnTIjOf+lWSJEmSJE0wzvBKkiRJkjrJgFeSJEmS1EkGvJIkSZKkTjLglSRJkiR1kgGvJEmSJKmTDHglSZIkSZ1kwCtJkiRJ6iQDXkmSJElSJ/0/WO2rol6o+rYAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1152x648 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = read_query(\"\"\"\n",
    "MATCH (a:Author)\n",
    "WHERE a.name contains \"Collaboration\"\n",
    "RETURN a.name as author,\n",
    "       size((a)-[:WROTE]->()) as number_of_articles\n",
    "ORDER BY number_of_articles\n",
    "DESC LIMIT 10\n",
    "\"\"\")\n",
    "\n",
    "fig, ax = pyplot.subplots(figsize=(16,9))\n",
    "ax = sns.barplot(x=\"author\", y=\"number_of_articles\", data=data, color=\"blue\")\n",
    "ax.set_xticklabels(ax.get_xticklabels(), rotation=30)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We have already known that ALICE and STAR collaborations are the most active, but there are many more collaborations in the nuclear experiment category. Unfortunately, the data appears dirty, as there are two STAR collaboration variations and two CLAS collaboration variations. We'll do some data cleaning of the Author entities before we continue with the graph exploration analysis.\n",
    "\n",
    "Data cleaning is the most fun part of any analysis. Well, not really, but it is a vital part of the research if we want to rely on the data. We'll introduce a secondary label for all collaboration nodes. Again, we will define a unique constraint for optimization and indexing."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "with driver.session() as session:\n",
    "    session.run('CREATE CONSTRAINT collaboration IF NOT EXISTS ON (c:Collaboration) ASSERT c.id IS UNIQUE;')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's take a look at the potential candidates that could be merged into a single entity. We will remove stop words from the author's name like \"the\", \"collaboration\", \"for\" and examine how well does this simple technique work."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>author</th>\n",
       "      <th>nodes</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>9405</td>\n",
       "      <td>[9405 collaboration, collaboration the 9405]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>A1</td>\n",
       "      <td>[A1 Collaboration, Collaboration A1, Collabora...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>AGATA</td>\n",
       "      <td>[Collaboration The AGATA, collaboration the AG...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>ALADIN</td>\n",
       "      <td>[Collaboration ALADIN, Collaboration the ALADI...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>ALADIN2000</td>\n",
       "      <td>[Collaboration ALADIN2000, The ALADIN2000 Coll...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>ALICE</td>\n",
       "      <td>[ALICE Collaboration, ALICE collaboration, Col...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>ATLAS</td>\n",
       "      <td>[ATLAS Collaboration, Collaboration ATLAS, The...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Adamczewski-Musch J.  HADES</td>\n",
       "      <td>[Adamczewski-Musch J.  HADES\\n  collaboration,...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Adamczyk L.  STAR</td>\n",
       "      <td>[Adamczyk L.  STAR\\n  Collaboration, Adamczyk ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Adhikari K. P.      CLAS</td>\n",
       "      <td>[Adhikari K. P.  for the CLAS\\n  collaboration...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                        author  \\\n",
       "0                         9405   \n",
       "1                           A1   \n",
       "2                        AGATA   \n",
       "3                       ALADIN   \n",
       "4                   ALADIN2000   \n",
       "5                        ALICE   \n",
       "6                        ATLAS   \n",
       "7  Adamczewski-Musch J.  HADES   \n",
       "8            Adamczyk L.  STAR   \n",
       "9     Adhikari K. P.      CLAS   \n",
       "\n",
       "                                               nodes  \n",
       "0       [9405 collaboration, collaboration the 9405]  \n",
       "1  [A1 Collaboration, Collaboration A1, Collabora...  \n",
       "2  [Collaboration The AGATA, collaboration the AG...  \n",
       "3  [Collaboration ALADIN, Collaboration the ALADI...  \n",
       "4  [Collaboration ALADIN2000, The ALADIN2000 Coll...  \n",
       "5  [ALICE Collaboration, ALICE collaboration, Col...  \n",
       "6  [ATLAS Collaboration, Collaboration ATLAS, The...  \n",
       "7  [Adamczewski-Musch J.  HADES\\n  collaboration,...  \n",
       "8  [Adamczyk L.  STAR\\n  Collaboration, Adamczyk ...  \n",
       "9  [Adhikari K. P.  for the CLAS\\n  collaboration...  "
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "WITH [\"The\",\"the\",\"Collaboration\", \"collaboration\", \"for\", \"For\", \"\\n\",\"on behalf of\",\"By \"] as remove_words\n",
    "MATCH (a:Author)\n",
    "WHERE a.name contains \"ollaboration\"\n",
    "WITH trim(reduce(v = a.name, word in remove_words | apoc.text.replace(v, word, ' '))) as author,\n",
    "       collect(a.name) as nodes\n",
    "WHERE size(nodes) > 1\n",
    "RETURN author, nodes\n",
    "ORDER BY author\n",
    "LIMIT 10\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It appears that this simple technique found many candidates to be merged. It also found examples where both an author and a collaboration can be mentioned as a single author. An example would be Adhikari K. P. for the CLAS Collaboration. We will first merge these candidates as presented in the previous query and go from there."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>result</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>done</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  result\n",
       "0   done"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "WITH [\"The\",\"the\",\"Collaboration\", \"collaboration\", \"for\", \"For\", \"\\n\",\"on behalf of\",\"By \"] as remove_words\n",
    "MATCH (a:Author)\n",
    "WHERE (a.name contains \"ollaboration\" OR a.name IN [\"INDRA\",\"H1\"]) AND NOT a.name CONTAINS \"ollaborations\" \n",
    "WITH trim(reduce(v = a.name, word in remove_words | apoc.text.replace(v, word, ' '))) as collab,\n",
    "       collect(a) as nodes\n",
    "CALL apoc.refactor.mergeNodes(nodes) YIELD node\n",
    "SET node.name = collab, node:Collaboration\n",
    "RETURN distinct 'done' as result\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we can decouple the entities where both the author and the collaboration are present as a single entity. We will start with a simple assumption that the last word in the author's name represents the collaboration. We will compare the last word of the author's name with the existing collaborations in our graph. If the last word matches an existing collaboration, we will decouple the single author node into collaboration and author nodes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>author</th>\n",
       "      <th>collab</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Ulery Jason Glyndwr</td>\n",
       "      <td>STAR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Peressounko D.</td>\n",
       "      <td>PHENIX</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Denizli H.</td>\n",
       "      <td>CLAS</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Mueller J.</td>\n",
       "      <td>CLAS</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>al. S. Dytman et</td>\n",
       "      <td>CLAS</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Sharma Monika</td>\n",
       "      <td>STAR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Dogra Sunil</td>\n",
       "      <td>STAR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Gupta Neeraj</td>\n",
       "      <td>STAR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Steinberg P.</td>\n",
       "      <td>ATLAS</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Hanks Ali</td>\n",
       "      <td>PHENIX</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                author  collab\n",
       "0  Ulery Jason Glyndwr    STAR\n",
       "1       Peressounko D.  PHENIX\n",
       "2           Denizli H.    CLAS\n",
       "3           Mueller J.    CLAS\n",
       "4     al. S. Dytman et    CLAS\n",
       "5        Sharma Monika    STAR\n",
       "6          Dogra Sunil    STAR\n",
       "7         Gupta Neeraj    STAR\n",
       "8         Steinberg P.   ATLAS\n",
       "9            Hanks Ali  PHENIX"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "MATCH (c:Collaboration)\n",
    "WHERE size(split(c.name,' ')) > 1\n",
    "WITH c, split(c.name,' ')[-1] as collab\n",
    "MATCH (c1:Collaboration{name:collab})\n",
    "RETURN trim(replace(c.name, collab, '')) as author, c1.name as collab\n",
    "LIMIT 10\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This query only looked at intermediate results but did not store the decoupled relationships. The decoupling results are satisfactory, so we will go ahead and save the decoupled relationships back to the graph."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>result</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>done</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  result\n",
       "0   done"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "MATCH (c:Collaboration)\n",
    "WHERE size(split(c.name,' ')) > 1\n",
    "WITH c, split(c.name,' ')[-1] as collab\n",
    "MATCH (new_colab:Collaboration{name:collab})\n",
    "WITH c,new_colab, trim(replace(c.name, collab, '')) as author\n",
    "MATCH (c)-[:WROTE]->(article:Article)\n",
    "MERGE (new_author:Author{name:author})\n",
    "MERGE (new_colab)-[:WROTE]->(article)\n",
    "MERGE (new_author)-[:WROTE]->(article)\n",
    "WITH distinct c\n",
    "DETACH DELETE c\n",
    "RETURN distinct 'done' as result\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's examine the potential collaboration candidates that our previous decoupling technique missed."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>author</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Junkersfeld J.      CB-ELSA</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Curceanu Catalina      AMADEUS</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>van Pee H.      CB-ELSA</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Bartholomy O.      CB-ELSA</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Crede V.      CB-ELSA</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Lukasik J.      ALADIN'2000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                           author\n",
       "0     Junkersfeld J.      CB-ELSA\n",
       "1  Curceanu Catalina      AMADEUS\n",
       "2         van Pee H.      CB-ELSA\n",
       "3      Bartholomy O.      CB-ELSA\n",
       "4           Crede V.      CB-ELSA\n",
       "5     Lukasik J.      ALADIN'2000"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "MATCH (c:Collaboration)\n",
    "WHERE size(split(c.name,' ')) > 1\n",
    "RETURN c.name as author\n",
    "LIMIT 6\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Some of the collaboration names are longer than just a single word, like  \"Jefferson Lab Hall A\" and we have missed those. Some of the others weren't tagged as collaborations before, because it is not explicitly tagged as collaboration in text. With a bit of manual work, I have listed a bunch of other collaborations that need to be decoupled as well."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>result</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>done</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  result\n",
       "0   done"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "UNWIND [\"Jefferson Lab Hall A\", \"NA61/SHINE\", \"Crystal Ball at MAMI\", \"WA98\", \"A2 at MAMI\",\n",
    "        \"JETSCAPE\", \"DLS\", \"WASA-at-COSY\", \"CERES/NA45\", \"ALADIN'2000\",\n",
    "        \"AMADEUS\", \"CB-ELSA\", \"GRAAL\", \"KEK-PS E559\",\"CELSIUS-WASA\",\n",
    "        \"RHIC Spin\", \"EIC\", \"LSSS\", \"COSY-11\", \"PAX\", \"Hall A\", \"LPC-CHARISSA-DEMON\",\n",
    "        \"Crystal Ball at MAMI\", \"KLOE-2\", \"Graal\", \"HAL QCD\", \"MAJORANA.\",\"Daya Bay\",\n",
    "        \"UConn-Yale-TUNL-Weizmann-PTB-UCL\", \"KamLAND-Zen\", \"COMPASS\", \"PREX\", \"ALICE HLT\"] as collab\n",
    "MATCH (c:Collaboration)\n",
    "WHERE size(split(c.name,' ')) > 1 AND NOT c.name in [\"Jefferson Lab Hall A\", \"Hall A DVCS\", \"Hall A\", \"HAL QCD\"] AND\n",
    "      c.name contains collab\n",
    "WITH c, trim(replace(c.name,collab,'')) as author, collab\n",
    "MERGE (new_author:Author{name:author})\n",
    "MERGE (new_collab:Author{name:collab})\n",
    "SET new_collab:Collaboration\n",
    "WITH c, new_author, new_collab\n",
    "MATCH (c)-[:WROTE]->(article:Article)\n",
    "MERGE (new_author)-[:WROTE]->(article)\n",
    "MERGE (new_collab)-[:WROTE]->(article)\n",
    "WITH distinct c\n",
    "DETACH delete c\n",
    "RETURN distinct 'done' as result\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Last, but not least, the  \"Jefferson Lab Hall A\" shows up also as \"Hall A DVCS\" and \"Hall A\", so we'll merge them into a single entity as well."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>result</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>done</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  result\n",
       "0   done"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "MATCH (c:Collaboration)\n",
    "WHERE c.name contains \"Hall A\"\n",
    "WITH c ORDER BY c.name\n",
    "WITH collect(c) as nodes\n",
    "CALL apoc.refactor.mergeNodes(nodes, {properties: {name:'overwrite'}}) YIELD node\n",
    "RETURN distinct 'done' as result\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We have cleaned the entities where a single collaboration or a pair of collaboration and an author appeared. The dataset also has entities where two or more collaborations can occur along with an author. Because this is not a data cleaning workshop, we'll skip cleaning this data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>author</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Acha A.  HKS - JLab\\n  E05-115 and E01-001 - C...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Achenbach P.  HKS - JLab\\n  E05-115 and E01-00...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Adhikari K. P.  The CLAS and Hall-A Collaborat...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Aghasyan M.  The CLAS and Hall-A Collaborations</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Aguar-Bartolomé P.  The Crystal Ball at MAMI, ...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                              author\n",
       "0  Acha A.  HKS - JLab\\n  E05-115 and E01-001 - C...\n",
       "1  Achenbach P.  HKS - JLab\\n  E05-115 and E01-00...\n",
       "2  Adhikari K. P.  The CLAS and Hall-A Collaborat...\n",
       "3    Aghasyan M.  The CLAS and Hall-A Collaborations\n",
       "4  Aguar-Bartolomé P.  The Crystal Ball at MAMI, ..."
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "MATCH (a:Author)\n",
    "WHERE a.name CONTAINS \"Collaborations\"\n",
    "RETURN a.name as author limit 5\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Exploratory graph analysis\n",
    "\n",
    "Finally, we can start our exploratory graph analysis. We will begin by taking a look at the number of articles written by publication year."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x648 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = read_query(\"\"\"\n",
    "MATCH (a:Article)\n",
    "RETURN a.date.year as year, count(*) as articles\n",
    "ORDER BY year\n",
    "\"\"\")\n",
    "fig, ax = pyplot.subplots(figsize=(16,9))\n",
    "ax = sns.barplot(x=\"year\", y=\"articles\", data=data, color=\"blue\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The nuclear experiment category on ArXiv was created in 1994. Since then, it has steadily risen in popularity until the year 2011, where the number of articles written per year has plateaued for the last decade.\n",
    "\n",
    "We will again take a look at the most active authors but disregard any collaborations this time."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Text(0, 0, 'Lebedev A.'),\n",
       " Text(1, 0, 'Ma Y. G.'),\n",
       " Text(2, 0, 'Li X.'),\n",
       " Text(3, 0, 'Zhang Y.'),\n",
       " Text(4, 0, 'Pei H.'),\n",
       " Text(5, 0, 'Taranenko A.'),\n",
       " Text(6, 0, 'Pak R.'),\n",
       " Text(7, 0, 'Xie W.'),\n",
       " Text(8, 0, 'Esumi S.'),\n",
       " Text(9, 0, 'Lacey R.')]"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x648 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = read_query(\"\"\"\n",
    "MATCH (a:Author)\n",
    "WHERE NOT a:Collaboration\n",
    "RETURN a.name as author,\n",
    "       size((a)-[:WROTE]->()) as number_of_articles\n",
    "ORDER BY number_of_articles DESC\n",
    "LIMIT 10\n",
    "\"\"\")\n",
    "\n",
    "fig, ax = pyplot.subplots(figsize=(16,9))\n",
    "ax = sns.barplot(x=\"author\", y=\"number_of_articles\", data=data, color=\"blue\")\n",
    "ax.set_xticklabels(ax.get_xticklabels(), rotation=30)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Lebedev A. stays as the most active author, while Ma. Y. G. and Li X. follow in the second and third place. Another interesting statistic to look at is who has collaborated with most of the other authors."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Text(0, 0, 'Wang Y.'),\n",
       " Text(1, 0, 'Zhang Y.'),\n",
       " Text(2, 0, 'Li Y.'),\n",
       " Text(3, 0, 'Dutta D.'),\n",
       " Text(4, 0, 'Zhang C.'),\n",
       " Text(5, 0, 'Li X.'),\n",
       " Text(6, 0, 'Weber M.'),\n",
       " Text(7, 0, 'Wang Z.'),\n",
       " Text(8, 0, 'Liu H.'),\n",
       " Text(9, 0, 'Huang J.')]"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x648 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = read_query(\"\"\"\n",
    "MATCH (a:Author)-[:WROTE]->()<-[:WROTE]-(other)\n",
    "WHERE NOT a:Collaboration AND NOT other:Collaboration\n",
    "RETURN a.name as author,\n",
    "       count(distinct other) as number_of_coauthors\n",
    "ORDER BY number_of_coauthors DESC\n",
    "LIMIT 10\n",
    "\"\"\")\n",
    "\n",
    "fig, ax = pyplot.subplots(figsize=(16,9))\n",
    "ax = sns.barplot(x=\"author\", y=\"number_of_coauthors\", data=data, color=\"blue\")\n",
    "ax.set_xticklabels(ax.get_xticklabels(), rotation=30)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Wang Y. has collaborated with more than 5000 other authors. When I first observed this data, I taught for sure there was some error in the data. It turns out this is correct. The only explanation is that there are articles where many scientists collaborated on a paper. We'll take a look at articles with the highest count of authors."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Text(0, 0, '2008.06647'),\n",
       " Text(1, 0, '1902.05599'),\n",
       " Text(2, 0, '1810.07655'),\n",
       " Text(3, 0, '1809.01404'),\n",
       " Text(4, 0, '1610.02149'),\n",
       " Text(5, 0, '1606.01118'),\n",
       " Text(6, 0, '1808.08917'),\n",
       " Text(7, 0, '1902.01211'),\n",
       " Text(8, 0, '1004.2377'),\n",
       " Text(9, 0, '1006.1961')]"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x648 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = read_query(\"\"\"\n",
    "MATCH (a:Author{name:\"Wang Y.\"})-[:WROTE]->(article)\n",
    "RETURN article.id as article,\n",
    "       size((article)<-[:WROTE]-()) as number_of_authors\n",
    "ORDER BY number_of_authors DESC\n",
    "LIMIT 10\n",
    "\"\"\")\n",
    "\n",
    "fig, ax = pyplot.subplots(figsize=(16,9))\n",
    "ax = sns.barplot(x=\"article\", y=\"number_of_authors\", data=data, color=\"blue\")\n",
    "ax.set_xticklabels(ax.get_xticklabels(), rotation=30)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There are four articles where more than 800 researchers have collaborated. I've also checked the ArXiv page to verify this data, and it turns out to be valid. I can only applaud the coordinators of these articles, where they could finish a paper with almost a thousand collaborators.\n",
    "\n",
    "Next, we'll take a look at pairs of researchers that have collaborated the most."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Text(0, 0, 'Lebedev A. with Li X.'),\n",
       " Text(1, 0, 'Lebedev A. with Pei H.'),\n",
       " Text(2, 0, 'Li X. with Pei H.'),\n",
       " Text(3, 0, 'Lebedev A. with Xie W.'),\n",
       " Text(4, 0, 'Pak R. with Lebedev A.'),\n",
       " Text(5, 0, 'Li X. with Xie W.'),\n",
       " Text(6, 0, 'Lebedev A. with Esumi S.'),\n",
       " Text(7, 0, 'Pak R. with Li X.'),\n",
       " Text(8, 0, 'Xie W. with Pei H.'),\n",
       " Text(9, 0, 'Lebedev A. with Jia J.')]"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x648 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = read_query(\"\"\"\n",
    "MATCH (a:Author)-[:WROTE]->()<-[:WROTE]-(other)\n",
    "WHERE id(a) < id(other) AND NOT a:Collaboration AND NOT other:Collaboration\n",
    "RETURN a.name + ' with ' + other.name as authors,\n",
    "       count(*) as number_of_collaborations\n",
    "ORDER BY number_of_collaborations DESC\n",
    "LIMIT 10\n",
    "\"\"\")\n",
    "\n",
    "fig, ax = pyplot.subplots(figsize=(16,9))\n",
    "ax = sns.barplot(x=\"authors\", y=\"number_of_collaborations\", data=data, color=\"blue\")\n",
    "ax.set_xticklabels(ax.get_xticklabels(), rotation=30)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Lebedev A. has worked on more than 200 articles with Li X. and around 180 articles with Pei H. In the third place, we have Li X. and Pei H. We might assume that Lebedev A., Li X., and Pei H. are the powerhouse in the Nuclear Experiments category.\n",
    "\n",
    "We can also examine the most active authors by publication year for the last decade."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>year</th>\n",
       "      <th>most_active_authors</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1994</td>\n",
       "      <td>[Igo G., Matis H. S., Barabanov A. L.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1995</td>\n",
       "      <td>[Cizewski J. A., Bowman D. R., Horn D.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1996</td>\n",
       "      <td>[Oberhummer H., Mohr P., Beer H.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1997</td>\n",
       "      <td>[VanDalen G. J., Wadia N., Geiger Klaus]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1998</td>\n",
       "      <td>[Oelert W., Balewski J. T., Kilian K.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1999</td>\n",
       "      <td>[Melby E., Schiller A., Rekstad J.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2000</td>\n",
       "      <td>[Wagner A., Strzalkowski A., Thomas A. W.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2001</td>\n",
       "      <td>[Drenska S. B., Raychev P. P., Roussev R. P.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2002</td>\n",
       "      <td>[Adcox K., Bahcall John N., Hudan S.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2003</td>\n",
       "      <td>[Adams J., Krusche B., Adler S. S.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>2004</td>\n",
       "      <td>[Ma Y. G., Ma Bo-Qiang, Back B. B.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>2005</td>\n",
       "      <td>[Ma Bo-Qiang, Li Bao-An, Adler S. S.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2006</td>\n",
       "      <td>[Ma Y. G., Gade A., Mueller W. F.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>2007</td>\n",
       "      <td>[Li Bao-An, Chen Lie-Wen, Suzuki T.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>2008</td>\n",
       "      <td>[Rauscher T., Abelev B. I., Wilkin C.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>2009</td>\n",
       "      <td>[Abelev B. I., Thoennessen M., Fabbietti L.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>2010</td>\n",
       "      <td>[Lebedev A., Chung P., Li X.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>2011</td>\n",
       "      <td>[Ma Y. G., Chung P., Arrington J.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>2012</td>\n",
       "      <td>[Lebedev A., Dion A., Fleuret F.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>2013</td>\n",
       "      <td>[Li X., Lebedev A., Masui H.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>2014</td>\n",
       "      <td>[Lebedev A., Li X., Pei H.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>2015</td>\n",
       "      <td>[Lebedev A., Li X., Manion A.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>2016</td>\n",
       "      <td>[Ma Y. G., Zhang Y., Lebedev A.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>2017</td>\n",
       "      <td>[Zhang J., Lebedev A., Skoby M. J.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>2018</td>\n",
       "      <td>[Lebedev A., Taranenko A., Zhang J.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>2019</td>\n",
       "      <td>[Li X., Wang Y., Taranenko A.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>2020</td>\n",
       "      <td>[Taranenko A., Lebedev A., Ma Y. G.]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    year                            most_active_authors\n",
       "0   1994         [Igo G., Matis H. S., Barabanov A. L.]\n",
       "1   1995        [Cizewski J. A., Bowman D. R., Horn D.]\n",
       "2   1996              [Oberhummer H., Mohr P., Beer H.]\n",
       "3   1997       [VanDalen G. J., Wadia N., Geiger Klaus]\n",
       "4   1998         [Oelert W., Balewski J. T., Kilian K.]\n",
       "5   1999            [Melby E., Schiller A., Rekstad J.]\n",
       "6   2000     [Wagner A., Strzalkowski A., Thomas A. W.]\n",
       "7   2001  [Drenska S. B., Raychev P. P., Roussev R. P.]\n",
       "8   2002          [Adcox K., Bahcall John N., Hudan S.]\n",
       "9   2003            [Adams J., Krusche B., Adler S. S.]\n",
       "10  2004            [Ma Y. G., Ma Bo-Qiang, Back B. B.]\n",
       "11  2005          [Ma Bo-Qiang, Li Bao-An, Adler S. S.]\n",
       "12  2006             [Ma Y. G., Gade A., Mueller W. F.]\n",
       "13  2007           [Li Bao-An, Chen Lie-Wen, Suzuki T.]\n",
       "14  2008         [Rauscher T., Abelev B. I., Wilkin C.]\n",
       "15  2009   [Abelev B. I., Thoennessen M., Fabbietti L.]\n",
       "16  2010                  [Lebedev A., Chung P., Li X.]\n",
       "17  2011             [Ma Y. G., Chung P., Arrington J.]\n",
       "18  2012              [Lebedev A., Dion A., Fleuret F.]\n",
       "19  2013                  [Li X., Lebedev A., Masui H.]\n",
       "20  2014                    [Lebedev A., Li X., Pei H.]\n",
       "21  2015                 [Lebedev A., Li X., Manion A.]\n",
       "22  2016               [Ma Y. G., Zhang Y., Lebedev A.]\n",
       "23  2017            [Zhang J., Lebedev A., Skoby M. J.]\n",
       "24  2018           [Lebedev A., Taranenko A., Zhang J.]\n",
       "25  2019                 [Li X., Wang Y., Taranenko A.]\n",
       "26  2020           [Taranenko A., Lebedev A., Ma Y. G.]"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "MATCH (a:Author)-[:WROTE]->(article:Article)\n",
    "WHERE NOT a:Collaboration AND article.date.year > 2010\n",
    "WITH article.date.year as year, a.name as author, count(*) as count\n",
    "ORDER BY count DESC \n",
    "RETURN year,\n",
    "       collect(author)[..3] as most_active_authors\n",
    "ORDER BY year \n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Co-authorship network analysis\n",
    "If we remember, the idea for this article came out of necessity to find a potential collaborator for my basement project. After some basic graph explorations, it seems that one can't do nuclear experiments on its own but has to join a collaboration or find a study to participate with 800 other scientists.\n",
    "We will explore the co-authorship network with the help of the Neo4j Graph Data Science library. If you need a quick refresher on how does the GDS library work, I would suggest the Introduction to graph algorithm course.\n",
    "An important thing to note is that our network analysis of the co-authorship network does not consider how influential the papers the authors have written are. It can be seen as more of a social network analysis, where we assume that if two authors collaborated on an article, they know each other. This way, I can find authors with lots of networking influence to collaborate on my project and introduce me to various people and organizations.\n",
    "We will use the Cypher projection feature to project the co-authorship network. The co-authorship relationship between the authors does not exist in our stored graph, so it could be said that we will be projecting a virtual network where we reduce the 2-hop relationship to a direct relationship without having to save the direct relationship in Neo4j. We will also disregard nodes with the Collaboration label in our analysis."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>nodeQuery</th>\n",
       "      <th>relationshipQuery</th>\n",
       "      <th>graphName</th>\n",
       "      <th>nodeCount</th>\n",
       "      <th>relationshipCount</th>\n",
       "      <th>createMillis</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>MATCH (a:Author) WHERE NOT a:Collaboration RET...</td>\n",
       "      <td>MATCH (s:Author)-[:WROTE]-&gt;()&lt;-[:WROTE]-(t:Aut...</td>\n",
       "      <td>coauthorship-network</td>\n",
       "      <td>55134</td>\n",
       "      <td>9932908</td>\n",
       "      <td>29973</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                           nodeQuery  \\\n",
       "0  MATCH (a:Author) WHERE NOT a:Collaboration RET...   \n",
       "\n",
       "                                   relationshipQuery             graphName  \\\n",
       "0  MATCH (s:Author)-[:WROTE]->()<-[:WROTE]-(t:Aut...  coauthorship-network   \n",
       "\n",
       "   nodeCount  relationshipCount  createMillis  \n",
       "0      55134            9932908         29973  "
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "CALL gds.graph.create.cypher('coauthorship-network',\n",
    "  'MATCH (a:Author) WHERE NOT a:Collaboration RETURN id(a) as id',\n",
    "  'MATCH (s:Author)-[:WROTE]->()<-[:WROTE]-(t:Author)\n",
    "   WHERE NOT s:Collaboration AND NOT t:Collaboration\n",
    "   RETURN id(s) as source, id(t) as target, count(*) as weight')\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We will begin with the Weakly Connected Components algorithms. It is used to find disconnected components or islands within the graph."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>componentCount</th>\n",
       "      <th>componentDistribution</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2281</td>\n",
       "      <td>{'p99': 35, 'min': 1, 'max': 46666, 'mean': 24...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   componentCount                              componentDistribution\n",
       "0            2281  {'p99': 35, 'min': 1, 'max': 46666, 'mean': 24..."
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "CALL gds.wcc.write('coauthorship-network', {writeProperty:'wcc_coauthorship'})\n",
    "YIELD componentCount, componentDistribution\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There is a total of 2281 components in our network. More than half of them consist of a single node, which indicates that the specific author has no collaborations. As with most real-world networks, we have a single super component that contains 85% of all nodes and then many smaller ones.\n",
    "Next, we will execute the weighted variant of the PageRank algorithm to find the authors with the highest networking potential. We expect that authors who collaborated with other influential networking authors will rank the highest. We will store the results to Neo4j with the write mode of the algorithm."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>centralityDistribution</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>{'p1': 0.14999961853027344, 'max': 16.52624416...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                              centralityDistribution\n",
       "0  {'p1': 0.14999961853027344, 'max': 16.52624416..."
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "CALL gds.pageRank.write('coauthorship-network', \n",
    "  {writeProperty:'pagerank_coauthorship', maxIterations:20, relationshipWeightProperty:'weight'})\n",
    "YIELD centralityDistribution\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's examine the authors with the highest networking potential."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Text(0, 0, 'Zhang Y.'),\n",
       " Text(1, 0, 'Lebedev A.'),\n",
       " Text(2, 0, 'Li X.'),\n",
       " Text(3, 0, 'Wang Y.'),\n",
       " Text(4, 0, 'Li Bao-An'),\n",
       " Text(5, 0, 'Li Y.'),\n",
       " Text(6, 0, 'Ma Y. G.'),\n",
       " Text(7, 0, 'Zhang J.'),\n",
       " Text(8, 0, 'Dutta D.'),\n",
       " Text(9, 0, 'Ye Z.')]"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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AABMSWAFAABgSgIrAAAAUxJYAQAAmJLACgAAwJQEVgAAAKYksAIAADAlgRUAAIApCawAAABMSWAFAABgSgIrAAAAUxJYAQAAmJLACgAAwJQEVgAAAKYksAIAADAlgRUAAIApCawAAABMSWAFAABgSgIrAAAAUxJYAQAAmJLACgAAwJQEVgAAAKYksAIAADAlgRUAAIApCawAAABMSWAFAABgSgIrAAAAUxJYAQAAmJLACgAAwJQEVgAAAKYksAIAADAlgRUAAIApCawAAABMSWAFAABgSgIrAAAAUxJYAQAAmJLACgAAwJQEVgAAAKYksAIAADAlgRUAAIApCawAAABMSWAFAABgSgIrAAAAUxJYAQAAmJLACgAAwJQEVgAAAKa0tsBaVQdX1Tuq6qXrqgEAAIB5rbOH9deTfGCN7w8AAMDE1hJYq+piSW6Z5CnreH8AAADmt64e1sckeWCSU07tBVV1VFUdW1XHnnTSSdtWGAAAAHPY9sBaVbdK8pnuPu60XtfdT+7uI7v7yF27dm1TdQAAAMxiHT2sP5HkNlV1QpLnJrlhVT1rDXUAAAAwsW0PrN39O919se4+PMmdkry6u++63XUAAAAwN/uwAgAAMKVD1vnm3f3aJK9dZw0AAADMSQ8rAAAAUxJYAQAAmJLACgAAwJQEVgAAAKYksAIAADAlgRUAAIApCawAAABMSWAFAABgSgIrAAAAUxJYAQAAmJLACgAAwJQEVgAAAKYksAIAADAlgRUAAIApCawAAABMSWAFAABgSgIrAAAAUxJYAQAAmJLACgAAwJQEVgAAAKYksAIAADAlgRUAAIApCawAAABMSWAFAABgSgIrAAAAUxJYAQAAmJLACgAAwJQEVgAAAKYksAIAADAlgRUAAIApCawAAABMSWAFAABgSgIrAAAAUxJYAQAAmJLACgAAwJQEVgAAAKYksAIAADAlgRUAAIApCawAAABMSWAFAABgSgIrAAAAUxJYAQAAmJLACgAAwJQEVgAAAKYksAIAADAlgRUAAIApCawAAABMadsDa1VdvKpeU1Xvr6r3VdWvb3cNAAAAzO+QNbznyUnu391vr6pzJzmuql7Z3e9fQy0AAABMatt7WLv7U9399uXvX07ygSQX3e46AAAAmNta57BW1eFJrprkLXt47qiqOraqjj3ppJO2vTYAAADWa22BtarOleQFSX6ju7+0+/Pd/eTuPrK7j9y1a9f2FwgAAMBarSWwVtVZMsLqs7v7heuoAQAAgLmtY5XgSvLUJB/o7kdv9/sDAACwM6yjh/Unkvx8khtW1TuX/26xhjoAAACY2LZva9Pd/5aktvt9AQAA2FnWukowAAAAnBqBFQAAgCkJrAAAAExJYAUAAGBKAisAAABTElgBAACYksAKAADAlARWAAAApiSwAgAAMCWBFQAAgCkJrAAAAExJYAUAAGBKAisAAABTElgBAACYksAKAADAlARWAAAApiSwAgAAMCWBFQAAgCkJrAAAAExJYAUAAGBKAisAAABTElgBAACYksAKAADAlARWAAAApiSwAgAAMCWBFQAAgCkJrAAAAExJYAUAAGBKAisAAABTElgBAACYksAKAADAlARWAAAApiSwAgAAMCWBFQAAgCkJrAAAAExJYAUAAGBKAisAAABTElgBAACYksAKAADAlARWAAAApiSwAgAAMCWBFQAAgCkJrAAAAExJYAUAAGBKAisAAABTElgBAACYksAKAADAlNYSWKvqZlX1oar6SFU9aB01AAAAMLdtD6xVdXCSJyS5eZLLJblzVV1uu+sAAABgbuvoYf3xJB/p7v/s7m8meW6S266hDgAAACZ2yBre86JJPrHp8YlJrrH7i6rqqCRHLQ+/UlUf2obazkwXSvLZdReRJFXrrmBlpjnHyX57np3j1XOOt8c059k53h776Xl2jrfHNOfZOd4e++l53onn+BJ7OriOwLol3f3kJE9edx37qqqO7e4j113H/sw5Xj3nePWc4+3hPK+ec7x6zvH2cJ5Xzzlevf3pHK9jSPAnk1x80+OLLccAAADgO9YRWN+W5FJVdURVnTXJnZK8ZA11AAAAMLFtHxLc3SdX1a8m+dckByc5urvft911bIMdO5x5B3GOV885Xj3neHs4z6vnHK+ec7w9nOfVc45Xb785x9Xd664BAAAAvs86hgQDAADA6RJYAQAAmJLACrCDVNXBy5/7565xAACbCKwTqaqnV9Wd110HMKequnSSN1RVtQUIto2bA3uvqq5QVdoYAJxhvkzm8vUkJ6y7CNhdVf10VV1y3XWQcyR5f3e3ELU9quogNwf2TlX9fJK/7O5T1l3LgaqqzrbuGg4EVXWIGzOrVVWHbPq77719UFXnq6qnVNVVl8c77jz6R7ZG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\n",
      "text/plain": [
       "<Figure size 1152x648 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = read_query(\"\"\"\n",
    "MATCH (a:Author)\n",
    "WHERE NOT a:Collaboration\n",
    "RETURN a.name as author, a.pagerank_coauthorship as pagerank\n",
    "ORDER BY pagerank DESC\n",
    "LIMIT 10\n",
    "\"\"\")\n",
    "\n",
    "fig, ax = pyplot.subplots(figsize=(16,9))\n",
    "ax = sns.barplot(x=\"author\", y=\"pagerank\", data=data, color=\"blue\")\n",
    "ax.set_xticklabels(ax.get_xticklabels(), rotation=30)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It seems that Zhang Y., Lebedev A., and Li X. have the highest networking potential. If someone can get me their contact, I would appreciate it.\n",
    "We can also examine authors with the highest PageRank score grouped by connected component for the five largest components."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>componentId</th>\n",
       "      <th>countOfMembers</th>\n",
       "      <th>mostInfluentialMembers</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>46666</td>\n",
       "      <td>[Wang Y., Zhang Y., Dutta D.]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>19971</td>\n",
       "      <td>200</td>\n",
       "      <td>[Pomerantz I.  The CLAS and Hall-A Collaborati...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14137</td>\n",
       "      <td>177</td>\n",
       "      <td>[Strakovsky Igor  GWU, Bellwied Rene  Houston ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>25481</td>\n",
       "      <td>133</td>\n",
       "      <td>[Taniya N.  HKS - JLab\\n  E05-115 and E01-001 ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>17156</td>\n",
       "      <td>132</td>\n",
       "      <td>[Nakamura S. N.  HKS, Matsumura A.  HKS, Okaya...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   componentId  countOfMembers  \\\n",
       "0            0           46666   \n",
       "1        19971             200   \n",
       "2        14137             177   \n",
       "3        25481             133   \n",
       "4        17156             132   \n",
       "\n",
       "                              mostInfluentialMembers  \n",
       "0                      [Wang Y., Zhang Y., Dutta D.]  \n",
       "1  [Pomerantz I.  The CLAS and Hall-A Collaborati...  \n",
       "2  [Strakovsky Igor  GWU, Bellwied Rene  Houston ...  \n",
       "3  [Taniya N.  HKS - JLab\\n  E05-115 and E01-001 ...  \n",
       "4  [Nakamura S. N.  HKS, Matsumura A.  HKS, Okaya...  "
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "MATCH (a:Author)\n",
    "WHERE NOT a:Collaboration\n",
    "WITH a.wcc_coauthorship as componentId, a.pagerank_coauthorship as pagerank, a\n",
    "ORDER BY pagerank DESC\n",
    "RETURN componentId, count(*) as countOfMembers, collect(a.name)[..3] as mostInfluentialMembers\n",
    "ORDER BY countOfMembers DESC\n",
    "LIMIT 5\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "More than anything, the WCC results alert us about the authors' data we haven't cleaned. I assume the largest component, which consists of 46666 members, is the component with the cleaned author names. The second-largest component consists of authors, where that author appeared along with two collaborations. Last, there are a couple of associations or organizations I have missed in my manual cleanup process.\n",
    "\n",
    "We will also use the approximate Betweenness centrality to observe who has the most influence over the information flow in the co-authorship network."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Text(0, 0, 'Zhang Y.'),\n",
       " Text(1, 0, 'Wang Y.'),\n",
       " Text(2, 0, 'Wang Meng'),\n",
       " Text(3, 0, 'Dutta D.'),\n",
       " Text(4, 0, 'Marciano W. J.'),\n",
       " Text(5, 0, 'Choi Seonho'),\n",
       " Text(6, 0, 'Li Y.'),\n",
       " Text(7, 0, 'Wang Z.'),\n",
       " Text(8, 0, 'Weber M.'),\n",
       " Text(9, 0, 'Deng Zhi')]"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x648 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = read_query(\"\"\"\n",
    "CALL gds.betweenness.stream('coauthorship-network', \n",
    "  {samplingSize:1000})\n",
    "YIELD nodeId, score\n",
    "RETURN gds.util.asNode(nodeId).name as author, score as betweenness\n",
    "ORDER BY betweenness DESC LIMIT 10\n",
    "\"\"\")\n",
    "\n",
    "fig, ax = pyplot.subplots(figsize=(16,9))\n",
    "ax = sns.barplot(x=\"author\", y=\"betweenness\", data=data, color=\"blue\")\n",
    "ax.set_xticklabels(ax.get_xticklabels(), rotation=30)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>graphName</th>\n",
       "      <th>database</th>\n",
       "      <th>memoryUsage</th>\n",
       "      <th>sizeInBytes</th>\n",
       "      <th>nodeProjection</th>\n",
       "      <th>relationshipProjection</th>\n",
       "      <th>nodeQuery</th>\n",
       "      <th>relationshipQuery</th>\n",
       "      <th>nodeCount</th>\n",
       "      <th>relationshipCount</th>\n",
       "      <th>density</th>\n",
       "      <th>creationTime</th>\n",
       "      <th>modificationTime</th>\n",
       "      <th>schema</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>coauthorship-network</td>\n",
       "      <td>neo4j</td>\n",
       "      <td>96 MiB</td>\n",
       "      <td>100867472</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>MATCH (a:Author) WHERE NOT a:Collaboration RET...</td>\n",
       "      <td>MATCH (s:Author)-[:WROTE]-&gt;()&lt;-[:WROTE]-(t:Aut...</td>\n",
       "      <td>55134</td>\n",
       "      <td>9932908</td>\n",
       "      <td>0.003268</td>\n",
       "      <td>2020-11-25T21:44:31.397368000+01:00</td>\n",
       "      <td>2020-11-25T21:45:01.349219000+01:00</td>\n",
       "      <td>{'relationships': {'__ALL__': {'weight': 'Floa...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              graphName database memoryUsage  sizeInBytes nodeProjection  \\\n",
       "0  coauthorship-network    neo4j      96 MiB    100867472           None   \n",
       "\n",
       "  relationshipProjection                                          nodeQuery  \\\n",
       "0                   None  MATCH (a:Author) WHERE NOT a:Collaboration RET...   \n",
       "\n",
       "                                   relationshipQuery  nodeCount  \\\n",
       "0  MATCH (s:Author)-[:WROTE]->()<-[:WROTE]-(t:Aut...      55134   \n",
       "\n",
       "   relationshipCount   density                         creationTime  \\\n",
       "0            9932908  0.003268  2020-11-25T21:44:31.397368000+01:00   \n",
       "\n",
       "                      modificationTime  \\\n",
       "0  2020-11-25T21:45:01.349219000+01:00   \n",
       "\n",
       "                                              schema  \n",
       "0  {'relationships': {'__ALL__': {'weight': 'Floa...  "
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "CALL gds.graph.drop('coauthorship-network')\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Citation network\n",
    "\n",
    "The time has come to enrich our graph with external data. The internal citation network between ArXiv articles is available on GitHub. You will need to download the internal references file. If you look closely at the Kaggle ArXiv dataset footnotes, this is the same tool they used to scrape the ArXiv articles and authors. It makes sense that the author's information is dirty as it was scraped from the PDFs.\n",
    "\n",
    "Citations dataset is available on https://github.com/mattbierbaum/arxiv-public-datasets/releases.\n",
    "\n",
    "After we have downloaded the internal references dataset, we can import it using the following Python script."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open('internal-references-pdftotext.json') as citation_file:\n",
    "    citations = json.load(citation_file)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "import_citations_query = \"\"\"\n",
    "\n",
    "UNWIND $data as row\n",
    "MATCH (source:Article{id:row.source})\n",
    "WITH source, row.cites as cites\n",
    "UNWIND cites as cite\n",
    "MATCH (target:Article{id:cite})\n",
    "MERGE (source)-[:CITES]->(target)\n",
    "RETURN distinct 'done' as result\n",
    "\"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "articles_id = articles_df['id'].to_list()\n",
    "citations_params = []\n",
    "session = driver.session()\n",
    "\n",
    "for article in citations:\n",
    "    if not article in articles_id:\n",
    "        continue\n",
    "    \n",
    "    citations_params.append({'source':article, 'cites': citations[article]})    \n",
    "    \n",
    "    if (len(citations_params) % 1000) == 0:\n",
    "        session.run(import_citations_query, {'data': citations_params})\n",
    "        citations_params = []\n",
    "\n",
    "session.run(import_citations_query, {'data': citations_params})\n",
    "session.close()        "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's first count the number of internal citations we have imported."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count_of_citations</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>56172</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   count_of_citations\n",
       "0               56172"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "MATCH ()-[r:CITES]->() \n",
    "RETURN count(*) as count_of_citations\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There are 56172 citations between 20874 articles. The dataset was compiled on 30th April 2019, so we don't have any citations after that date. We can now look at the most cited articles within our network."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>title</th>\n",
       "      <th>citations</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Formation of dense partonic matter in relativi...</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Experimental and Theoretical Challenges in the...</td>\n",
       "      <td>247</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Glauber Modeling in High Energy Nuclear Collis...</td>\n",
       "      <td>222</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Hydrodynamic description of ultrarelativistic ...</td>\n",
       "      <td>220</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Quark Gluon Plasma an Color Glass Condensate a...</td>\n",
       "      <td>202</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Collective phenomena in non-central nuclear co...</td>\n",
       "      <td>201</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>The PHOBOS Perspective on Discoveries at RHIC</td>\n",
       "      <td>194</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Performance of the ALICE Experiment at the CER...</td>\n",
       "      <td>177</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Observation and studies of jet quenching in Pb...</td>\n",
       "      <td>169</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Long-range angular correlations on the near an...</td>\n",
       "      <td>156</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                               title  citations\n",
       "0  Formation of dense partonic matter in relativi...        256\n",
       "1  Experimental and Theoretical Challenges in the...        247\n",
       "2  Glauber Modeling in High Energy Nuclear Collis...        222\n",
       "3  Hydrodynamic description of ultrarelativistic ...        220\n",
       "4  Quark Gluon Plasma an Color Glass Condensate a...        202\n",
       "5  Collective phenomena in non-central nuclear co...        201\n",
       "6      The PHOBOS Perspective on Discoveries at RHIC        194\n",
       "7  Performance of the ALICE Experiment at the CER...        177\n",
       "8  Observation and studies of jet quenching in Pb...        169\n",
       "9  Long-range angular correlations on the near an...        156"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "MATCH (a:Article)\n",
    "RETURN a.title as title,\n",
    "       size((a)<-[:CITES]-()) as citations\n",
    "ORDER BY citations DESC LIMIT 10\n",
    "\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To my uneducated eye, it seems that the most cited articles talk about nuclear collisions. Next, we will calculate the ArticleRank score for each article in the citation network. ArticleRank is a variation of the PageRank algorithm. Find more details here.\n",
    "\n",
    "First, we will project the citation network with the Native projection feature."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>nodeProjection</th>\n",
       "      <th>relationshipProjection</th>\n",
       "      <th>graphName</th>\n",
       "      <th>nodeCount</th>\n",
       "      <th>relationshipCount</th>\n",
       "      <th>createMillis</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>{'Article': {'properties': {}, 'label': 'Artic...</td>\n",
       "      <td>{'CITES': {'orientation': 'NATURAL', 'aggregat...</td>\n",
       "      <td>citation-network</td>\n",
       "      <td>20874</td>\n",
       "      <td>56172</td>\n",
       "      <td>153</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                      nodeProjection  \\\n",
       "0  {'Article': {'properties': {}, 'label': 'Artic...   \n",
       "\n",
       "                              relationshipProjection         graphName  \\\n",
       "0  {'CITES': {'orientation': 'NATURAL', 'aggregat...  citation-network   \n",
       "\n",
       "   nodeCount  relationshipCount  createMillis  \n",
       "0      20874              56172           153  "
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "CALL gds.graph.create('citation-network', 'Article', 'CITES')\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can execute the ArticleRank and store the results back to Neo4j."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>nodes</th>\n",
       "      <th>iterations</th>\n",
       "      <th>createMillis</th>\n",
       "      <th>computeMillis</th>\n",
       "      <th>writeMillis</th>\n",
       "      <th>dampingFactor</th>\n",
       "      <th>writeProperty</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>149</td>\n",
       "      <td>260</td>\n",
       "      <td>0.0</td>\n",
       "      <td>articlerank_citation</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   nodes  iterations  createMillis  computeMillis  writeMillis  dampingFactor  \\\n",
       "0      0           0             0            149          260            0.0   \n",
       "\n",
       "          writeProperty  \n",
       "0  articlerank_citation  "
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "CALL gds.alpha.articleRank.write('citation-network', \n",
    "  {writeProperty:'articlerank_citation'})\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's examine the ArticleRank algorithm results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>title</th>\n",
       "      <th>articlerank</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Hydrodynamic description of ultrarelativistic ...</td>\n",
       "      <td>7.417196</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Collective phenomena in non-central nuclear co...</td>\n",
       "      <td>5.009129</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Eccentricity fluctuations and its possible eff...</td>\n",
       "      <td>4.826668</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Glauber Modeling in High Energy Nuclear Collis...</td>\n",
       "      <td>3.886324</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>The Color Glass Condensate and High Energy Sca...</td>\n",
       "      <td>3.617933</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Reconstructing azimuthal distributions in nucl...</td>\n",
       "      <td>3.539150</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>The PHOBOS Glauber Monte Carlo</td>\n",
       "      <td>3.293096</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Formation of dense partonic matter in relativi...</td>\n",
       "      <td>3.259142</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>An Experimental Exploration of the QCD Phase D...</td>\n",
       "      <td>3.168804</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Experimental and Theoretical Challenges in the...</td>\n",
       "      <td>3.001694</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                               title  articlerank\n",
       "0  Hydrodynamic description of ultrarelativistic ...     7.417196\n",
       "1  Collective phenomena in non-central nuclear co...     5.009129\n",
       "2  Eccentricity fluctuations and its possible eff...     4.826668\n",
       "3  Glauber Modeling in High Energy Nuclear Collis...     3.886324\n",
       "4  The Color Glass Condensate and High Energy Sca...     3.617933\n",
       "5  Reconstructing azimuthal distributions in nucl...     3.539150\n",
       "6                     The PHOBOS Glauber Monte Carlo     3.293096\n",
       "7  Formation of dense partonic matter in relativi...     3.259142\n",
       "8  An Experimental Exploration of the QCD Phase D...     3.168804\n",
       "9  Experimental and Theoretical Challenges in the...     3.001694"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "MATCH (a:Article)\n",
    "RETURN a.title as title, a.articlerank_citation as articlerank\n",
    "ORDER BY articlerank \n",
    "DESC LIMIT 10\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can observe that the ranking is a bit different as with the direct count of citation rank. The ranking difference is due to taking into account the number of citations as well as the importance of the citing papers.\n",
    "\n",
    "We can also look at the author with the highest sum of ArticleRank of his articles."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Text(0, 0, 'Lebedev A.'),\n",
       " Text(1, 0, 'Li X.'),\n",
       " Text(2, 0, 'Ma Y. G.'),\n",
       " Text(3, 0, 'Pei H.'),\n",
       " Text(4, 0, 'Zhang Y.'),\n",
       " Text(5, 0, 'Xie W.'),\n",
       " Text(6, 0, 'Pak R.'),\n",
       " Text(7, 0, 'Taranenko A.'),\n",
       " Text(8, 0, 'Liu H.'),\n",
       " Text(9, 0, 'Masui H.')]"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6wAAAI1CAYAAADSJXd7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAA2jUlEQVR4nO3dd7isV1k3/u+dBAiiEMohRlpCC4JUI9KlSxOiIFUNRQNIVYqxUcSCyk+KIoq0IN0IUqW8AX6ACBIUqVITBF4gQYgCCphwv3+sZyc74YSckMyetc/+fK7rXHvmmZl9VuZMnnm+q9yrujsAAAAwm33W3QAAAADYHYEVAACAKQmsAAAATElgBQAAYEoCKwAAAFMSWAEAAJjSfutuwJ64xCUu0QcffPC6mwEAAMAKvPe97/1Sd+868/FtEVgPPvjgHHfccetuBgAAACtQVZ/e3XFTggEAAJiSwAoAAMCUBFYAAACmJLACAAAwJYEVAACAKQmsAAAATElgBQAAYEoCKwAAAFMSWAEAAJiSwAoAAMCUBFYAAACmJLACAAAwJYEVAACAKQmsAAAATElgBQAAYEoCKwAAAFNaWWCtqkOr6n2b/vxXVT28qi5WVW+qqo8vPy+6qjYAAACwfa0ssHb3R7v7Wt19rSQ/muS/k7wiyVFJju3uKyU5drkPAAAAZ7BVU4JvkeST3f3pJHdKcvRy/Ogkh29RGwAAANhGtiqw3j3Ji5fbB3b355fbX0hy4O5eUFVHVtVxVXXcSSedtBVtBAAAYCIrD6xVdf4kd0zyN2d+rLs7Se/udd39zO4+rLsP27Vr14pbCQAAwGz224K/47ZJ/rm7v7jc/2JVHdTdn6+qg5KceF78JYcccsJ58Wv2Sscff/C6mwAAAHCObcWU4Hvk9OnASfKqJEcst49I8sotaAMAAADbzEoDa1VdKMmtkrx80+EnJrlVVX08yS2X+wAAAHAGK50S3N1fT3LxMx37j4yqwQAAAHCWtqpKMAAAAJwjAisAAABTElgBAACYksAKAADAlARWAAAApiSwAgAAMCWBFQAAgCkJrAAAAExJYAUAAGBKAisAAABTElgBAACYksAKAADAlARWAAAApiSwAgAAMCWBFQAAgCkJrAAAAExJYAUAAGBKAisAAABTElgBAACYksAKAADAlARWAAAApiSwAgAAMCWBFQAAgCkJrAAAAExJYAUAAGBKAisAAABTElgBAACYksAKAADAlARWAAAApiSwAgAAMCWBFQAAgCkJrAAAAExJYAUAAGBKAisAAABTElgBAACY0n7rbgDbxyGHnLDuJkzr+OMPXncTAABgr2OEFQAAgCkJrAAAAExJYAUAAGBKAisAAABTElgBAACYksAKAADAlARWAAAApiSwAgAAMCWBFQAAgCkJrAAAAExJYAUAAGBKAisAAABTElgBAACYksAKAADAlARWAAAApiSwAgAAMCWBFQAAgCkJrAAAAExJYAUAAGBKAisAAABTElgBAACY0koDa1UdUFXHVNW/VdVHqur6VXWxqnpTVX18+XnRVbYBAACA7WnVI6xPTfL67r5Kkmsm+UiSo5Ic291XSnLsch8AAADOYGWBtaoukuQmSZ6dJN39re4+Ocmdkhy9PO3oJIevqg0AAABsX6scYT0kyUlJnltV/1JVz6qqCyU5sLs/vzznC0kOXGEbAAAA2KZWGVj3S3KdJM/o7msn+XrONP23uztJ7+7FVXVkVR1XVceddNJJK2wmAAAAM1plYP1sks9297uX+8dkBNgvVtVBSbL8PHF3L+7uZ3b3Yd192K5du1bYTAAAAGa0ssDa3V9I8pmqOnQ5dIskH07yqiRHLMeOSPLKVbUBAACA7Wu/Ff/+hyR5YVWdP8mnktwnIyS/rKrul+TTSe664jYAAACwDa00sHb3+5IctpuHbrHKvxcAAIDtb9X7sAIAAMD3RGAFAABgSgIrAAAAUxJYAQAAmJLACgAAwJQEVgAAAKYksAIAADAlgRUAAIApCawAAABMSWAFAABgSgIrAAAAUxJYAQAAmJLACgAAwJQEVgAAAKYksAIAADAlgRUAAIApCawAAABMSWAFAABgSgIrAAAAUxJYAQAAmJLACgAAwJQEVgAAAKYksAIAADAlgRUAAIApCawAAABMSWAFAABgSgIrAAAAUxJYAQAAmJLACgAAwJQEVgAAAKYksAIAADAlgRUAAIApCawAAABMab91NwA43SGHnLDuJkzt+OMPXncTAADYQkZYAQAAmJLACgAAwJQEVgAAAKYksAIAADAlgRUAAIApCawAAABMSWAFAABgSgIrAAAAUxJYAQAAmJLACgAAwJQEVgAAAKYksAIAADAlgRUAAIApCawAAABMSWAFAABgSgIrAAAAUxJY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\n",
      "text/plain": [
       "<Figure size 1152x648 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = read_query(\"\"\"\n",
    "MATCH (a:Author)-[:WROTE]->(article:Article)\n",
    "WHERE NOT a:Collaboration\n",
    "RETURN a.name as author, sum(article.articlerank_citation) as rank\n",
    "ORDER BY rank\n",
    "DESC LIMIT 10\n",
    "\"\"\")\n",
    "\n",
    "fig, ax = pyplot.subplots(figsize=(16,9))\n",
    "ax = sns.barplot(x=\"author\", y=\"rank\", data=data, color=\"blue\")\n",
    "ax.set_xticklabels(ax.get_xticklabels(), rotation=30)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The usual suspects come out on top like Lebedev A. and Li X. Another option we have is to look at the most influential articles by the year of publication."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>year</th>\n",
       "      <th>most_influential_articles</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2011</td>\n",
       "      <td>[1101.0710, 1101.0988, 1101.1257]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2012</td>\n",
       "      <td>[1201.0373, 1201.0392, 1201.0699]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2013</td>\n",
       "      <td>[1301.0099, 1301.0165, 1301.0324]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2014</td>\n",
       "      <td>[1403.4257, 1403.4455, 1403.4668]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015</td>\n",
       "      <td>[1511.02834, 1511.02957, 1511.03338]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2016</td>\n",
       "      <td>[1601.00040, 1601.00079, 1601.00188]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2017</td>\n",
       "      <td>[1709.05325, 1709.05618, 1709.05649]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2018</td>\n",
       "      <td>[1801.01124, 1801.01213, 1801.01277]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2019</td>\n",
       "      <td>[1901.01319, 1901.04378, 1901.04482]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   year             most_influential_articles\n",
       "0  2011     [1101.0710, 1101.0988, 1101.1257]\n",
       "1  2012     [1201.0373, 1201.0392, 1201.0699]\n",
       "2  2013     [1301.0099, 1301.0165, 1301.0324]\n",
       "3  2014     [1403.4257, 1403.4455, 1403.4668]\n",
       "4  2015  [1511.02834, 1511.02957, 1511.03338]\n",
       "5  2016  [1601.00040, 1601.00079, 1601.00188]\n",
       "6  2017  [1709.05325, 1709.05618, 1709.05649]\n",
       "7  2018  [1801.01124, 1801.01213, 1801.01277]\n",
       "8  2019  [1901.01319, 1901.04378, 1901.04482]"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "MATCH (a:Article)\n",
    "WHERE a.articlerank_citation > 0.151 AND a.date.year > 2010\n",
    "WITH a, a.date.year as year, a.pagerank_citation as pagerank\n",
    "ORDER BY pagerank DESC\n",
    "RETURN year, collect(a.id)[..3] as most_influential_articles\n",
    "ORDER BY year\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>graphName</th>\n",
       "      <th>database</th>\n",
       "      <th>memoryUsage</th>\n",
       "      <th>sizeInBytes</th>\n",
       "      <th>nodeProjection</th>\n",
       "      <th>relationshipProjection</th>\n",
       "      <th>nodeQuery</th>\n",
       "      <th>relationshipQuery</th>\n",
       "      <th>nodeCount</th>\n",
       "      <th>relationshipCount</th>\n",
       "      <th>density</th>\n",
       "      <th>creationTime</th>\n",
       "      <th>modificationTime</th>\n",
       "      <th>schema</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>citation-network</td>\n",
       "      <td>neo4j</td>\n",
       "      <td>6200 KiB</td>\n",
       "      <td>6348824</td>\n",
       "      <td>{'Article': {'properties': {}, 'label': 'Artic...</td>\n",
       "      <td>{'CITES': {'orientation': 'NATURAL', 'aggregat...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>20874</td>\n",
       "      <td>56172</td>\n",
       "      <td>0.000129</td>\n",
       "      <td>2020-11-25T22:20:31.402535000+01:00</td>\n",
       "      <td>2020-11-25T22:20:31.559302000+01:00</td>\n",
       "      <td>{'relationships': {'CITES': {}}, 'nodes': {'Ar...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          graphName database memoryUsage  sizeInBytes  \\\n",
       "0  citation-network    neo4j    6200 KiB      6348824   \n",
       "\n",
       "                                      nodeProjection  \\\n",
       "0  {'Article': {'properties': {}, 'label': 'Artic...   \n",
       "\n",
       "                              relationshipProjection nodeQuery  \\\n",
       "0  {'CITES': {'orientation': 'NATURAL', 'aggregat...      None   \n",
       "\n",
       "  relationshipQuery  nodeCount  relationshipCount   density  \\\n",
       "0              None      20874              56172  0.000129   \n",
       "\n",
       "                          creationTime                     modificationTime  \\\n",
       "0  2020-11-25T22:20:31.402535000+01:00  2020-11-25T22:20:31.559302000+01:00   \n",
       "\n",
       "                                              schema  \n",
       "0  {'relationships': {'CITES': {}}, 'nodes': {'Ar...  "
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "CALL gds.graph.drop('citation-network')\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Prepare an article search engine\n",
    "We have analyzed both the co-authorship and the citation network. I have a good idea who I need to contact for my basement nuclear reactor. Let's now create a search engine for the articles, where you get the most relevant articles based on the keyword you provide. We will use the Fulltext search index, which is available in Neo4j. I have written a detailed blog post explaining the FTS functionalities in Neo4j.\n",
    "First, we have to store the publication year of the article as a string property to be able to load it in the Full-Text Search index."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Empty DataFrame\n",
       "Columns: []\n",
       "Index: []"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "MATCH (a:Article)\n",
    "SET a.year = toString(a.date.year)\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can create the Full-Text Search index, where we index the title, abstract, and year property of articles."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Empty DataFrame\n",
       "Columns: []\n",
       "Index: []"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "CALL db.index.fulltext.createNodeIndex(\"titlesAndAbstracts\",[\"Article\"],[\"title\", \"abstract\", \"year\"])\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can take execute a sample FTS query looking for articles containing LHC keyword in the text."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>node.title</th>\n",
       "      <th>score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Physics perspectives with AFTER@LHC (A Fixed T...</td>\n",
       "      <td>4.070171</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Quarkonium-photoproduction prospects at a fixe...</td>\n",
       "      <td>3.962277</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Charmonium production at the LHC</td>\n",
       "      <td>3.870992</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Prospectives for A Fixed-Target ExpeRiment at ...</td>\n",
       "      <td>3.811666</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Double-quarkonium production at a fixed-target...</td>\n",
       "      <td>3.724421</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Spin physics and TMD studies at A Fixed-Target...</td>\n",
       "      <td>3.682571</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Physics case for a polarised target for AFTER@LHC</td>\n",
       "      <td>3.660166</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Studies of Transverse-Momentum-Dependent distr...</td>\n",
       "      <td>3.636151</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Heavy-ion results from the LHC</td>\n",
       "      <td>3.626198</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>LHC Results on Charmonium in Heavy Ions</td>\n",
       "      <td>3.606902</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                          node.title     score\n",
       "0  Physics perspectives with AFTER@LHC (A Fixed T...  4.070171\n",
       "1  Quarkonium-photoproduction prospects at a fixe...  3.962277\n",
       "2                   Charmonium production at the LHC  3.870992\n",
       "3  Prospectives for A Fixed-Target ExpeRiment at ...  3.811666\n",
       "4  Double-quarkonium production at a fixed-target...  3.724421\n",
       "5  Spin physics and TMD studies at A Fixed-Target...  3.682571\n",
       "6  Physics case for a polarised target for AFTER@LHC  3.660166\n",
       "7  Studies of Transverse-Momentum-Dependent distr...  3.636151\n",
       "8                     Heavy-ion results from the LHC  3.626198\n",
       "9            LHC Results on Charmonium in Heavy Ions  3.606902"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "CALL db.index.fulltext.queryNodes(\"titlesAndAbstracts\", \"LHC\") YIELD node, score\n",
    "RETURN node.title, score\n",
    "LIMIT 10\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can upgrade our query and search for articles containing LHC keyword that were published in 2015. We can also combine the Lucene score with the ArticleRank score to return more influential papers."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>title</th>\n",
       "      <th>id</th>\n",
       "      <th>combined_score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>The Color Glass Condensate and High Energy Sca...</td>\n",
       "      <td>hep-ph/0303204</td>\n",
       "      <td>3.409086</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Observation of long-range near-side angular co...</td>\n",
       "      <td>1210.5482</td>\n",
       "      <td>3.318393</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Performance of the ALICE Experiment at the CER...</td>\n",
       "      <td>1402.4476</td>\n",
       "      <td>3.286480</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Photon Physics in Heavy Ion Collisions at the LHC</td>\n",
       "      <td>hep-ph/0311131</td>\n",
       "      <td>3.113061</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Observation and studies of jet quenching in Pb...</td>\n",
       "      <td>1102.1957</td>\n",
       "      <td>2.806736</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Hard scattering cross sections at LHC in the G...</td>\n",
       "      <td>nucl-ex/0302016</td>\n",
       "      <td>2.617114</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Heavy-flavour and quarkonium production in the...</td>\n",
       "      <td>1506.03981</td>\n",
       "      <td>2.602295</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Proton-Nucleus Collisions at the LHC: Scientif...</td>\n",
       "      <td>1105.3919</td>\n",
       "      <td>2.541617</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Heavy Ion Collisions at the LHC - Last Call fo...</td>\n",
       "      <td>0711.0974</td>\n",
       "      <td>2.486684</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Jet size dependence of single jet suppression ...</td>\n",
       "      <td>1208.1967</td>\n",
       "      <td>2.430719</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                               title               id  \\\n",
       "0  The Color Glass Condensate and High Energy Sca...   hep-ph/0303204   \n",
       "1  Observation of long-range near-side angular co...        1210.5482   \n",
       "2  Performance of the ALICE Experiment at the CER...        1402.4476   \n",
       "3  Photon Physics in Heavy Ion Collisions at the LHC   hep-ph/0311131   \n",
       "4  Observation and studies of jet quenching in Pb...        1102.1957   \n",
       "5  Hard scattering cross sections at LHC in the G...  nucl-ex/0302016   \n",
       "6  Heavy-flavour and quarkonium production in the...       1506.03981   \n",
       "7  Proton-Nucleus Collisions at the LHC: Scientif...        1105.3919   \n",
       "8  Heavy Ion Collisions at the LHC - Last Call fo...        0711.0974   \n",
       "9  Jet size dependence of single jet suppression ...        1208.1967   \n",
       "\n",
       "   combined_score  \n",
       "0        3.409086  \n",
       "1        3.318393  \n",
       "2        3.286480  \n",
       "3        3.113061  \n",
       "4        2.806736  \n",
       "5        2.617114  \n",
       "6        2.602295  \n",
       "7        2.541617  \n",
       "8        2.486684  \n",
       "9        2.430719  "
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "CALL db.index.fulltext.queryNodes(\"titlesAndAbstracts\", \"LHC AND year:2015\") YIELD node, score\n",
    "RETURN node.title as title, node.id as id, score * node.articlerank_citation as combined_score\n",
    "ORDER BY combined_score DESC\n",
    "LIMIT 5\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Another cool thing we can do with Fulltext search is to introduce the time-decay scoring. I've learned this trick from Christophe Willemsen."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>title</th>\n",
       "      <th>id</th>\n",
       "      <th>combined_score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Performance of the ALICE Experiment at the CER...</td>\n",
       "      <td>1402.4476</td>\n",
       "      <td>13.141213</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Heavy-flavour and quarkonium production in the...</td>\n",
       "      <td>1506.03981</td>\n",
       "      <td>9.478550</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Observation of long-range near-side angular co...</td>\n",
       "      <td>1210.5482</td>\n",
       "      <td>6.864690</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Collective flow and viscosity in relativistic ...</td>\n",
       "      <td>1301.2826</td>\n",
       "      <td>6.646857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Observation and studies of jet quenching in Pb...</td>\n",
       "      <td>1102.1957</td>\n",
       "      <td>6.287071</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                               title          id  \\\n",
       "0  Performance of the ALICE Experiment at the CER...   1402.4476   \n",
       "1  Heavy-flavour and quarkonium production in the...  1506.03981   \n",
       "2  Observation of long-range near-side angular co...   1210.5482   \n",
       "3  Collective flow and viscosity in relativistic ...   1301.2826   \n",
       "4  Observation and studies of jet quenching in Pb...   1102.1957   \n",
       "\n",
       "   combined_score  \n",
       "0       13.141213  \n",
       "1        9.478550  \n",
       "2        6.864690  \n",
       "3        6.646857  \n",
       "4        6.287071  "
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "WITH apoc.text.join([x in range(0,10) | \n",
    "\"year:\" + toString((date().year - x)) + \"^\" +   \n",
    "  toString(10-x)],\" \") as time_decay\n",
    "CALL db.index.fulltext.queryNodes(\"titlesAndAbstracts\", \"LHC \" + time_decay) YIELD node, score\n",
    "RETURN node.title as title, node.id as id, score * node.articlerank_citation as combined_score\n",
    "ORDER BY combined_score DESC\n",
    "LIMIT 5\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Develop an article recommendation engine\n",
    "If we are already making an application on top of this dataset, we can also add a recommendation engine. We want to be able to recommend similar articles to the one we are currently reading. How do we go about that? We don't have any data yet in the graph that we could use to group similar articles together. Luckily, we can use many NLP tools to find similar papers given their title and abstract text. We will use the SciBert model to extract embeddings for each article and then use the kNN algorithm to find similar papers based on their embeddings.\n",
    "First, we have to calculate the embeddings and store them back to Neo4j. We will use the transformers library to load the pre-trained SciBert model and calculate the embeddings based on the title and abstract of an article."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "from transformers import *\n",
    "\n",
    "tokenizer = AutoTokenizer.from_pretrained('allenai/scibert_scivocab_uncased', model_max_length=512)\n",
    "model = AutoModel.from_pretrained('allenai/scibert_scivocab_uncased')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "store_embeddings_query = \"\"\"\n",
    "UNWIND $data as row\n",
    "MATCH (a:Article{id:row.article_id})\n",
    "SET a.embeddings = row.embeddings\n",
    "\"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<neo4j.work.result.Result at 0x7fb897beee10>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "input_embeddings = []\n",
    "session = driver.session()\n",
    "for i, row in articles_df.iterrows():\n",
    "    inputs = tokenizer(row['clean_title'] + ' ' + row['clean_abstracts'], return_tensors=\"pt\", truncation=True)\n",
    "    outputs = model(**inputs)\n",
    "    embeddings = outputs[1].detach().numpy().tolist()[0]\n",
    "    input_embeddings.append({'embeddings':embeddings, 'article_id': row['id']})\n",
    "    \n",
    "    if len(input_embeddings) % 1000 == 0:\n",
    "        session.run(store_embeddings_query, {'data':input_embeddings})\n",
    "        input_embeddings = []\n",
    "        \n",
    "session.run(store_embeddings_query, {'data':input_embeddings})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This process took around an hour on my laptop. With the embeddings stored in Neo4j, we can go ahead infer the kNN similarity network using the new k-Nearest Neighbour algorithm available in the GDS. As always, we have to first project the in-memory graph."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>nodeProjection</th>\n",
       "      <th>relationshipProjection</th>\n",
       "      <th>graphName</th>\n",
       "      <th>nodeCount</th>\n",
       "      <th>relationshipCount</th>\n",
       "      <th>createMillis</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>{'Article': {'properties': {'embeddings': {'pr...</td>\n",
       "      <td>{'__ALL__': {'orientation': 'NATURAL', 'aggreg...</td>\n",
       "      <td>article_similarity</td>\n",
       "      <td>20874</td>\n",
       "      <td>56172</td>\n",
       "      <td>1010</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                      nodeProjection  \\\n",
       "0  {'Article': {'properties': {'embeddings': {'pr...   \n",
       "\n",
       "                              relationshipProjection           graphName  \\\n",
       "0  {'__ALL__': {'orientation': 'NATURAL', 'aggreg...  article_similarity   \n",
       "\n",
       "   nodeCount  relationshipCount  createMillis  \n",
       "0      20874              56172          1010  "
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "CALL gds.graph.create('article_similarity','Article','*', {nodeProperties:['embeddings']})\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We want to be able to recommend at most ten similar articles, so we will choose the topK value of 10 in the configuration option for the kNN algorithm. We will store the results as SIMILAR relationships between articles, where the score property will indicate the cosine similarity between the embeddings of the two articles."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>createMillis</th>\n",
       "      <th>computeMillis</th>\n",
       "      <th>writeMillis</th>\n",
       "      <th>postProcessingMillis</th>\n",
       "      <th>nodesCompared</th>\n",
       "      <th>relationshipsWritten</th>\n",
       "      <th>similarityDistribution</th>\n",
       "      <th>configuration</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>10545</td>\n",
       "      <td>3791</td>\n",
       "      <td>-1</td>\n",
       "      <td>20874</td>\n",
       "      <td>208740</td>\n",
       "      <td>{'p1': 0.8992156982421875, 'max': 1.0000038146...</td>\n",
       "      <td>{'topK': 10, 'maxIterations': 100, 'writeConcu...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   createMillis  computeMillis  writeMillis  postProcessingMillis  \\\n",
       "0             1          10545         3791                    -1   \n",
       "\n",
       "   nodesCompared  relationshipsWritten  \\\n",
       "0          20874                208740   \n",
       "\n",
       "                              similarityDistribution  \\\n",
       "0  {'p1': 0.8992156982421875, 'max': 1.0000038146...   \n",
       "\n",
       "                                       configuration  \n",
       "0  {'topK': 10, 'maxIterations': 100, 'writeConcu...  "
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "CALL gds.beta.knn.write('article_similarity', {nodeWeightProperty:'embeddings', \n",
    "writeProperty:'score', writeRelationshipType:'SIMILAR', topK:10})\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can now observe the recommendations for a random article."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>original</th>\n",
       "      <th>recommendation</th>\n",
       "      <th>score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Observation of long-range near-side angular co...</td>\n",
       "      <td>Evidence for collectivity in pp collisions at ...</td>\n",
       "      <td>0.985051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Observation of long-range near-side angular co...</td>\n",
       "      <td>Baryon and meson screening masses</td>\n",
       "      <td>0.981358</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Observation of long-range near-side angular co...</td>\n",
       "      <td>High Precision Measurement of the Proton Elast...</td>\n",
       "      <td>0.981115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Observation of long-range near-side angular co...</td>\n",
       "      <td>Direct Observation of Proton-Neutron Short-Ran...</td>\n",
       "      <td>0.980855</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Observation of long-range near-side angular co...</td>\n",
       "      <td>In-medium minijet dissipation in Au+Au collisi...</td>\n",
       "      <td>0.979592</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                            original  \\\n",
       "0  Observation of long-range near-side angular co...   \n",
       "1  Observation of long-range near-side angular co...   \n",
       "2  Observation of long-range near-side angular co...   \n",
       "3  Observation of long-range near-side angular co...   \n",
       "4  Observation of long-range near-side angular co...   \n",
       "\n",
       "                                      recommendation     score  \n",
       "0  Evidence for collectivity in pp collisions at ...  0.985051  \n",
       "1                  Baryon and meson screening masses  0.981358  \n",
       "2  High Precision Measurement of the Proton Elast...  0.981115  \n",
       "3  Direct Observation of Proton-Neutron Short-Ran...  0.980855  \n",
       "4  In-medium minijet dissipation in Au+Au collisi...  0.979592  "
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "MATCH (a:Article{id:\"1210.5482\"})-[s:SIMILAR]->(similar)\n",
    "RETURN a.title as original, similar.title as recommendation, s.score as score\n",
    "ORDER BY score DESC\n",
    "LIMIT 5\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And just like before, we can combine the similarity score and ArticleRank score to recommend more relevant articles."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>original</th>\n",
       "      <th>recommendation</th>\n",
       "      <th>score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Observation of long-range near-side angular co...</td>\n",
       "      <td>Centrality dependence of dihadron correlations...</td>\n",
       "      <td>0.973401</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Observation of long-range near-side angular co...</td>\n",
       "      <td>Long-range and short-range dihadron angular co...</td>\n",
       "      <td>0.860485</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Observation of long-range near-side angular co...</td>\n",
       "      <td>Evidence for collectivity in pp collisions at ...</td>\n",
       "      <td>0.547358</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Observation of long-range near-side angular co...</td>\n",
       "      <td>Long-range two-particle correlations of strang...</td>\n",
       "      <td>0.338009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Observation of long-range near-side angular co...</td>\n",
       "      <td>Measurement of long-range near-side two-partic...</td>\n",
       "      <td>0.311173</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                            original  \\\n",
       "0  Observation of long-range near-side angular co...   \n",
       "1  Observation of long-range near-side angular co...   \n",
       "2  Observation of long-range near-side angular co...   \n",
       "3  Observation of long-range near-side angular co...   \n",
       "4  Observation of long-range near-side angular co...   \n",
       "\n",
       "                                      recommendation     score  \n",
       "0  Centrality dependence of dihadron correlations...  0.973401  \n",
       "1  Long-range and short-range dihadron angular co...  0.860485  \n",
       "2  Evidence for collectivity in pp collisions at ...  0.547358  \n",
       "3  Long-range two-particle correlations of strang...  0.338009  \n",
       "4  Measurement of long-range near-side two-partic...  0.311173  "
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "read_query(\"\"\"\n",
    "MATCH (a:Article{id:\"1210.5482\"})-[s:SIMILAR]->(similar)\n",
    "RETURN a.title as original, similar.title as recommendation, \n",
    "       s.score * similar.articlerank_citation as score\n",
    "ORDER BY score DESC\n",
    "LIMIT 5\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "nlp",
   "language": "python",
   "name": "nlp"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
